-2

HashSet と HashMap の関係は何ですか?

javadoc から:

HashSet

public HashSet()

Constructs a new, empty set; the backing HashMap instance has default initial 

容量 (16) と負荷率 (0.75)。

そして、「負荷率」とはどういう意味ですか? 前もって感謝します。

4

3 に答える 3

1

HashSetの観点から実装されていますHashMap

このクラスはSet、ハッシュ テーブル (実際にはHashMapインスタンス) に基づくインターフェイスを実装します。

負荷率はドキュメントで説明されています:

HashMap のインスタンスには、そのパフォーマンスに影響を与える 2 つのパラメーターがあります。初期容量と負荷係数です。容量はハッシュ テーブル内のバケットの数であり、初期容量は単にハッシュ テーブルが作成された時点の容量です。負荷率は、容量が自動的に増加する前に、ハッシュ テーブルがどれだけいっぱいになることができるかの尺度です。ハッシュ テーブルのエントリ数が負荷係数と現在の容量の積を超えると、ハッシュ テーブルが再ハッシュされ (つまり、内部データ構造が再構築され)、ハッシュ テーブルのバケット数が約 2 倍になります。

原則として、デフォルトの負荷係数 (.75) は、時間とスペースのコストの適切なトレードオフを提供します。値を大きくすると、領域のオーバーヘッドは減少しますが、ルックアップ コストが増加します (get や put を含む HashMap クラスのほとんどの操作に反映されます)。再ハッシュ操作の回数を最小限に抑えるために、初期容量を設定するときは、マップ内の予想エントリ数とその負荷係数を考慮する必要があります。初期容量がエントリの最大数を負荷係数で割った値よりも大きい場合、再ハッシュ操作は発生しません。

于 2013-06-29T15:37:02.167 に答える
0

HashSet と HashMap の関係は何ですか?

その関係は、それぞれHashSet<T>がその中にプライベートを持っているというHashMap<T, Object>ことです。(Java 7 版では、値はプライベートObjectインスタンスです...)

そして、「負荷率」とはどういう意味ですか?

「負荷係数」という用語は、 のjavadocで定義されていHashMapます。あなたはそこでそれについて読むことができます。(そのために書かれたものです...)

参照:

于 2013-06-29T15:36:34.557 に答える
0

HashSetのソースコードより

public HashSet(Collection<? extends E> c) {
    map = new HashMap<E,Object>(Math.max((int) (c.size()/.75f) + 1, 16));
    addAll(c);
}
于 2013-06-29T15:37:15.980 に答える