【发布时间】:2011-11-15 21:27:37
【问题描述】:
一项任务要求我们使用 ArrayList 或 LinkedList 作为后端来实现 Bag 数据类型。我选择了 ArrayList 并创建了我自己的实现,包括 Collection 接口的本地实现。现在我正在努力解决如何使用我的 List 类来调整 Bag 属性的基本概念,特别是在 List 中插入一个 List。
我的 List 的设置方式遵循通常的 Java 类型,只是所有方法都没有实现,这就是为什么我将自己的 Collection 接口类型编写为
public interface Collection<E>
实现 add、remove、size、clear、contains、isEmpty 和 toArray 方法。
List 类型声明为
public class List<E> implements Collection<E>
三个私有字段:
private int size;
private E[] data;
private int growSize=10;
E[] data 包含所需的任何元素类型,growSize 是根据需要增加列表大小的新插槽数。这在传统上将 List 用于单个对象时效果很好,但是当我尝试插入 List 类型时会出错。
我正在尝试实现这个方法:
public boolean add(Collection<E> c){
if (size < data.length){
data= (E[]) new Object[10];
data[0]= c;
}
}
当我尝试这个时,它说 Collection 和 E 之间存在类型不匹配。
两个问题:
- 首先,我在这里违反了 Java 泛型的哪些规则,为什么?
- 其次,需要什么来修复它?
【问题讨论】:
-
请提供有关您的错误和导致错误的代码的更多信息
-
E 可以是 List> 类型。你遇到了什么错误?
-
add是做什么的?添加单个元素?还是添加某个集合中的所有元素?
标签: java generics data-structures