コレクションからHashSet
とLinkedHashSet
を作成すると、initialCapacity
はデフォルトの実装では異なる値に設定されます。異なる初期値 'initialCapacity' HashSetとLinkedHashSet
HashSetの:
public HashSet(Collection<? extends E> c) {
map = new HashMap<>(Math.max((int) (c.size()/.75f) + 1, 16));
addAll(c);
}
LinkedHashSetの:
public LinkedHashSet(Collection<? extends E> c) {
super(Math.max(2*c.size(), 11), .75f, true);
addAll(c);
}
私はこのために完全に正当な理由があると確信しているが、私はそれを見ることができません。ここにあなたが私たちを示したコードから
ドキュメントをお読みください:初期容量と負荷係数: 'リンクハッシュセットは、その性能に影響を与える2つのパラメータがあります。それらはHashSetとまったく同じように定義されています。ただし、このクラスの反復時間は容量に影響されないため、初期クラスの容量を過度に高く設定する場合のペナルティは、このクラスではHashSetクラスよりも厳しくありません。 ' - https://docs.oracle.com/ javase/7/docs/api/java/util/LinkedHashSet.html –
@TimBiegeleisen私はコメントでEnterを押すことができなかったことを知らなかった。 –
Info: 'HashSet'はサイズまたは' 16'の '4/3'のうち大きい方を使いますが、' LinkedHashSet'は2倍の大きさ、つまり '11'を使います。両方とも、0.75fの負荷係数を使用します –