1.はじめに
ソースコード、HashMapの分析の完了についての記事を分析し続けます。この記事では、最初のHashSet簡単に見て分析します。
HashMapのY.ダウン継承特徴ようHashSetの要素は、実装内部のHashMapの非反復のセットです。記憶素子は、無秩序であり、HashSetのは、空の要素を可能にします。
非同期のHashSetの。複数のスレッドがハッシュセットにアクセスし、それらのスレッドの少なくとも1つがセットを変更する場合には、外部で同期をとる必要があります。(参考JDK1.8ドキュメント、JDKのドキュメントの注目返信JDK可能な中国語版)
Set s = Collections.synchronizedSet(new HashSet(...));
上記のリンク:
1.継承構造
HashMapのの継承構造を見てください
そして、HashSetのような他のコレクションは、また、CloneableをとSerializableの二つのインターフェースを実装するだけでなく、設定されたインターフェイスSetインタフェース仕様の一部に。
- Cloneableをクローン
- シリアライズシリアライズ
2つのプロパティ
HashSetのデータストレージは、機能の一部もオーバー継承されているので、HashMapの、のHashMapによって達成されます。最高に直接行っていない時間のソースコードを読んで最初のHashSet HashMapのは、読む前に読んでください。ソースウォッチングの最良のHashMapの1.7バージョンと併せて読むと。
private transient HashMap<E,Object> map;
データ上にHashSetのを話すHashMapのKとして実装ハッシュマップによって格納され、Vの結束が存在します
// Dummy value to associate with an Object in the backing Map
private static final Object PRESENT = new Object();
3.コンストラクタ
引数なしのコンストラクタ、HashMapのは、直接記事に引数なしのデフォルト属性のコンストラクタを作成するデフォルトの容量と負荷率が16 0.75であることを言いました
指定された容量
指定された容量と負荷率、負荷率がHashMapの負荷率のデフォルト*の容量の合計容量を計算するために使用される、デフォルトの負荷係数は0.75であります
指定されたコレクションの要素
4.追加
これは、キーとデフォルト値が存在するMAPDとして追加される要素を追加HashSetのを使用するように置くの要素を見ることができます。挿入されたキー値が存在しない場合、記事はHashMapのPUTメソッドを導入し、それはそれ以外の場合は、判断をしたので、ここで、値が既に存在返すnullを返します。それは非常に簡単ではありません。
5.検索
偽リターンの欠如がある場合にはHashMapのcontainsKeyメソッドと呼ばれる要素がtrueを返して下さい。
6.削除
削除方法は、また、removeメソッドマップを呼び出して、私たちはHashSetのは、HashMapの上のすべての依存している見る場所を確認します。
7.反復法
地図はまた、イテレータを返すために、キーのkeySetを使用することによって達成されます。
8.おわり
その後、基本的にはソースコードが読み取られた場合のHashSetはHashMapの、ハッシュマップによって実現され、物事の実際には、いくつかの、問題ありません。(これはおそらく、最もリラックスしている私は、ハッハッハ求めて記事を書きました)