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(),编译器没有抱怨,它运行得很好!谢谢