Java &引用;“通用数组创建”;在处理有关不安全操作的投诉时

Java &引用;“通用数组创建”;在处理有关不安全操作的投诉时,java,Java,以下代码行导致javac发出不安全操作警告: LinkedList<Node>[] buckets = new LinkedList[bucketCount]; LinkedList[]bucket=新建LinkedList[bucketCount]; 但是,当我尝试通过这样做来解决此问题时: LinkedList<Node>[] buckets = new LinkedList<Node>[bucketCount]; LinkedList[]bucke

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

LinkedList<Node>[] buckets = new LinkedList[bucketCount];
LinkedList[]bucket=新建LinkedList[bucketCount];
但是,当我尝试通过这样做来解决此问题时:

LinkedList<Node>[] buckets = new LinkedList<Node>[bucketCount];
LinkedList[]bucket=新建LinkedList[bucketCount];
我得到一个
通用数组创建
错误。我该如何解决这个问题?

简而言之

bucket
转换为
LinkedList
ArrayList

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

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

LinkedList只有两个构造函数,一个是默认构造函数,另一个接受扩展集合的参数

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

公共链接列表(Collection@NPE出于教育目的,我正在实现自己的hashmap。我相信语法是List bucket=newlinkedlist(bucketCount);@NPE这是一个输入错误,左边的类型肯定是一个数组。可能会有一些好的背景信息是的,Java泛型有点像黑客,不能很好地处理这种情况。但是必须使用非数组来规避人为限制是愚蠢的。
List<Node> list = new ArrayList<Node>(bucketCount);