次のコード行によりjavac
、安全でない操作の警告が表示されます。
LinkedList<Node>[] buckets = new LinkedList[bucketCount];
ただし、これを実行して修正しようとすると、次のようになります。
LinkedList<Node>[] buckets = new LinkedList<Node>[bucketCount];
generic array creation
エラーが発生します。どうすればこれを解決できますか?
次のコード行によりjavac
、安全でない操作の警告が表示されます。
LinkedList<Node>[] buckets = new LinkedList[bucketCount];
ただし、これを実行して修正しようとすると、次のようになります。
LinkedList<Node>[] buckets = new LinkedList<Node>[bucketCount];
generic array creation
エラーが発生します。どうすればこれを解決できますか?
一言で言えば、ジェネリック型の配列は問題があります。
のに変換buckets
します。ArrayList
LinkedList
ArrayList<LinkedList<Node>> buckets = new ArrayList<LinkedList<Node>>(bucketCount);
for (int i = 0; i < bucketCount; ++i) {
buckets.add(new LinkedList<Node>());
}
これにより、コンパイル時の型安全性が得られます。
LinkedList には 2 つのコンストラクタしかありません。1 つはデフォルトで、もう 1 つは Collection を拡張するパラメータを受け入れます。
public LinkedList(Collection<? extends E> c) {
this();
addAll(c);
}
つまり、LinkedList には初期化サイズを指定できません。コンテナーの容量を初期化する必要がある場合は、次のように ArrayList を使用することをお勧めします。
List<Node> list = new ArrayList<Node>(bucketCount);
幸運を :)