2

以下代码行导致javac发出不安全操作警告:

LinkedList<Node>[] buckets = new LinkedList[bucketCount];

但是,当我尝试通过这样做来解决这个问题时:

LinkedList<Node>[] buckets = new LinkedList<Node>[bucketCount];

我得到一个generic array creation错误。我该如何解决这个问题?

4

2 回答 2

1

简而言之,泛型类型的数组是有问题的

变成s的buckets一个:ArrayListLinkedList

ArrayList<LinkedList<Node>> buckets = new ArrayList<LinkedList<Node>>(bucketCount);
for (int i = 0; i < bucketCount; ++i) {
    buckets.add(new LinkedList<Node>());
}

这样,您将获得编译时类型安全。

于 2013-03-22T10:29:18.577 回答
0

LinkedList只有两个构造函数,一个是默认的,另一个接受一个继承Collection的参数,

public LinkedList(Collection<? extends E> c) {
this();
addAll(c);
}

也就是说LinkedList不能有初始化大小,如果需要初始化容器的容量,最好使用ArrayList,如下:

List<Node> list = new ArrayList<Node>(bucketCount);

祝你好运 :)

于 2013-03-22T10:42:04.823 回答