繁体   English   中英

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

[英]How to create a class that implements java.util.collections

我正在尝试创建一个可以实现java.util.collections类的MyStack类。 MyStack将覆盖像添加收藏类的一些方法(类似于推),删除(类似于POP)等。我打算到类在同一行作为模型Set ,除了或集合类的其他接口MyStack会不是接口或抽象类,我们可以创建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

我们高度赞赏任何代码修改,示例,我的代码更正,教程链接等。

一定要在你的课上加上<E>规范:

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

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

java.util中

AbstractCollection<E>

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

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

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

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

你非常接近!

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

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

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

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

代替:

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

尝试:

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM