如何创建实现java.util.collections的类

时间:2010-11-29 05:49:32

标签: java collections

我正在尝试创建一个实现java.util.collections类的类MyStackMyStack将覆盖集合类的一些方法,如add(类似于push),remove(类似于pop)等。我打算在与Set或其他接口相同的行上对类进行建模集合类除了MyStack不是接口或抽象类之外,我们可以创建类型为MyStack的对象。

我的语法有问题,因为我不确定我是否正在朝着正确的方向前进。到目前为止我所有的都是这样的 - 注意 - 到目前为止还没有定义任何方法 - 我试图得到在继续定义方法之前的骨架。

import java.util.*;


public class MyStak implements java.util.Collection<E>{

    public boolean add(E o){

               return false;        
        }

       public boolean addAll(Collection c){
        return false; 

        }

       public void clear() {

       }

        public boolean contains(Object o){
          return false;

        }

        public boolean containsAll(Collection o){
          return false;

        }

        public boolean equals(Object c){
          return false; 
        }

        public int hashcode(){
          return 0; 
        }

        public boolean isEmpty(){
          return false; 
        }

        public Iterator iterator(){
          return null;

        }

        public boolean remove(Object o){
          return false; 
        }

        public boolean removeAll(Collection o){
          return false; 
        }

        public boolean retainAll(Collection o){
          return false; 
        }

        public int size(){
          return 1; 
        }

         public Object[] toArray(){
           return null;

         }

         public Object[] toArray(Object[] a){
           return null; 
         }

    }

我有几个编译时错误,如 -

    +public class MyStak implements java.util.Collection<E>{
Multiple markers at this line
    - The type MyStak must implement the inherited abstract method 
     Collection<E>.add(E)
    - E cannot be resolved to a type

    +public boolean add(E o){
Multiple markers at this line
    - E cannot be resolved to a type
    - implements 
     java.util.Collection<E>.add

我们非常感谢任何代码修改,示例,我的代码更正,教程链接等。

6 个答案:

答案 0 :(得分:17)

确保在课堂上使用<E>规范:

public class MyStak<E> implements java.util.Collection<E>
                   ^^^

如果您想让自己的生活更轻松,请尝试对AbstractCollection进行子分类,而不是直接实施Collection。它为大多数方法提供了合理的默认实现,以最大限度地减少您需要编写的代码量。

  

<子> java.util中

     

Class AbstractCollection<E>

     

此类提供Collection接口的骨干实现,以最大限度地减少实现此接口所需的工作量。

     

要实现不可修改的集合,程序员只需要扩展此类并提供iteratorsize方法的实现。 (iterator方法返回的迭代器必须实现hasNextnext。)

     

要实现可修改的集合,程序员必须另外覆盖此类的add方法(否则会抛出UnsupportedOperationException),并且iterator方法返回的迭代器必须另外实现其remove方法。

     

程序员通常应根据void接口规范中的建议提供Collection(无参数)和Collection构造函数。

答案 1 :(得分:4)

你非常接近!

您只需要在子类中定义E:

public class MyStak<E> implements java.util.Collection<E>

这个想法是你可以有一个子类,比如<E, F, G>,你实现了两个不同的接口,一个使用E,一个使用F.那,或者MyStak可以是专用的,并使用特定的类Collection,而不是通用的E

答案 2 :(得分:2)

并建议,如果您计划实现自己的集合接口,请考虑扩展相应的抽象类,但不实现接口本身,导致抽象类实现方法一般到接口。 看看:AbstractCollection,AbstractSet,AbstractList

答案 3 :(得分:1)

而不是:

public class MyStak implements java.util.Collection<E>{

尝试:

public class MyStak<E> implements java.util.Collection<E>{

答案 4 :(得分:0)

当我们实施Collection时,我们也必须实现Iterator<E>。用于迭代您想要的项目。

答案 5 :(得分:0)

定义一个你真正想要实现的堆栈吗?如果是这样,那么继续进行定义,甚至不用实现Collection接口 - 对于简单的情况就可以了。或者使用现有的类 - java.util.Stack。