のは、私のようにHashMapを持っているとしましょうMap<Integer, List<Integer>> map = new HashMap<>();
。
今List<Integer> values = computeIfAbsent(key, ArrayList::new);
完璧に動作しますが、List<Integer> values = computeIfAbsent(key, LinkedList::new);
コンパイルエラーがスローされます。
私は両方のArrayListやLinkedListの中で引数なしのコンストラクタを見ることができます。私は缶誰かがこの動作を説明し、ここで行方不明ですか?
必要なラムダは、署名のものでなければならないFunction<? super K,? extends V> mappingFunction
あなたが書くときに、:
List<Integer> values = map.computeIfAbsent(key, ArrayList::new);
いずれかと互換性のある型の引数を持つコンストラクタkey
(Integer
)が与えられなければなりません。以下のための1つがありますArrayList
が、ノーについてはLinkedList
:
コンストラクタのためにArrayList
:
配列リスト()
ArrayListの(コレクションC)
ArrayListを(int型InitialCapacityの値)
コンストラクタのためにLinkedList
:
LinkedListの()
LinkedListの(コレクションC)
Becarefulそれがために働くという事実があることArrayList
、それは空の構築として、おそらく良いポイントではありませんArrayList
(不思議なボーダー効果につながる可能)初期容量を持ちます。
あなたはを参照してもよいのJavaのメソッドを参照。