なぜ私がLinkedListは::新しいを使用することはできませんか?

apersiankite:

のは、私のようにHashMapを持っているとしましょうMap<Integer, List<Integer>> map = new HashMap<>();

List<Integer> values = computeIfAbsent(key, ArrayList::new);完璧に動作しますが、List<Integer> values = computeIfAbsent(key, LinkedList::new);コンパイルエラーがスローされます。

私は両方のArrayListやLinkedListの中で引数なしのコンストラクタを見ることができます。私は缶誰かがこの動作を説明し、ここで行方不明ですか?

ジャン=バティスト・Yunès:

必要なラムダは、署名のものでなければならないFunction<? super K,? extends V> mappingFunctionあなたが書くときに、:

List<Integer> values = map.computeIfAbsent(key, ArrayList::new);

いずれかと互換性のある型の引数を持つコンストラクタkeyInteger)が与えられなければなりません。以下のための1つがありますArrayListが、ノーについてはLinkedList

コンストラクタのためにArrayList

配列リスト()

ArrayListの(コレクションC)

ArrayListを(int型InitialCapacityの値)

コンストラクタのためにLinkedList

LinkedListの()

LinkedListの(コレクションC)

Becarefulそれがために働くという事実があることArrayList、それは空の構築として、おそらく良いポイントではありませんArrayList(不思議なボーダー効果につながる可能)初期容量を持ちます。

あなたはを参照してもよいのJavaのメソッドを参照

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=222161&siteId=1