Java 如何实现实现集合的模板化类

Java 如何实现实现集合的模板化类,java,collections,interface,comparable,Java,Collections,Interface,Comparable,这是一个我很难解决的家庭作业问题。该类的框架如下所示: public class Storage<E> implements java.util.Collection<E> { private Object[] data = new Object[256]; private int nextEmptySlot = 0; @Override public java.util.Iterator<E> iterator() { // returns a c

这是一个我很难解决的家庭作业问题。该类的框架如下所示:

public class Storage<E> implements java.util.Collection<E> {
private Object[] data = new Object[256];
private int nextEmptySlot = 0;

@Override
public java.util.Iterator<E> iterator() {
    // returns a class that iterates over the data array
    return new java.util.Iterator() {
        // insert the body of the inner class here
        // 3 methods: remove(), hasNext(), next()
        };
    }
//Override all methods required by the interface
}
公共类存储实现java.util.Collection{
私有对象[]数据=新对象[256];
私有int-nextenstlot=0;
@凌驾
public java.util.Iterator迭代器(){
//返回在数据数组上迭代的类
返回新的java.util.Iterator(){
//在此处插入内部类的主体
//3种方法:remove()、hasNext()、next()
};
}
//重写接口所需的所有方法
}

现在我遇到的麻烦是编写contains(objecto)之类的函数,因为模板不强制E具有可比性。如何将模板类型E视为可比较的,以便使用equals和CompatieTo?我知道在类声明中有这样做的方法,但类声明是给定的,不要求E具有可比性…

您可以绑定类型E

public class Storage<E  **extends Comparable**> implements java.util.Collection<E>
公共类存储实现java.util.Collection

您也可以根据需要参数化可比较的集合。

实现排序的唯一集合是
SortedMap
SortedSet
,这两个集合都没有对类型参数进行限制。在内部,我假设它强制转换为
Comparable
,如果失败,则抛出
classcastexception
。无序集合只依赖于
equals()
hashCode()
,不需要
可比的

,您不需要
compareTo()
,因为这样可以定义元素的顺序(尽管它可以告诉您两个对象是否相等)。除非这里的秩序很重要,否则这不会是你想要的

如果order不是必需的假设是正确的,那么您需要依赖的就是集合中每个实例的
equals(
)方法

  • 如果
    E
    正确覆盖
    equals()
    hashCode()
    方法,则
    E
    本身将能够确定元素是否在此集合中
  • 如果它没有覆盖
    equals()
    方法,那么实例将依赖
    对象的
    equals()
    实现,该实现只是比较引用(如果它们都是非空的)

  • 我建议你先弄清楚这项任务的要求。如果需求陈述了更具体的内容,您可以确定集合中的相等性。如果你不能得到任何更清楚的信息,我相信你唯一的选择就是依靠
    E
    equals()

    实现你得到的代码可以编辑吗?OP说这不是一个选项可能不想要罕见的类型!啊,是的,对不起。我错过了。我没有意识到他不能更改模板。
    的+1等于
    /如果你看一下类似的
    TreeMap
    你会看到一片混乱。
    Comparable
    Comparator
    类型的一个实现,这意味着没有强制执行边界。我想这就是我应该做的。只使用了equals(),编译器没有抱怨,它运行得很好!谢谢