HashSetのソースコード解析:JDKのソースシリーズ

1.はじめに

ソースコード、HashMapの分析の完了についての記事を分析し続けます。この記事では、最初のHashSet簡単に見て分析します。

HashMapのY.ダウン継承特徴ようHashSetの要素は、実装内部のHashMapの非反復のセットです。記憶素子は、無秩序であり、HashSetのは、空の要素を可能にします。

非同期のHashSetの。複数のスレッドがハッシュセットにアクセスし、それらのスレッドの少なくとも1つがセットを変更する場合には、外部で同期をとる必要があります。(参考JDK1.8ドキュメント、JDKのドキュメントの注目返信JDK可能な中国語版)

 Set s = Collections.synchronizedSet(new HashSet(...)); 

上記のリンク:

(a)は読み出しHashMapのソースコード

HashMapのソースコード読み取り(B)

1.継承構造

HashMapのの継承構造を見てください

HashSetのソースコード解析:JDKのソースシリーズ

そして、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であることを言いました

HashSetのソースコード解析:JDKのソースシリーズ

指定された容量

HashSetのソースコード解析:JDKのソースシリーズ

指定された容量と負荷率、負荷率がHashMapの負荷率のデフォルト*の容量の合計容量を計算するために使用される、デフォルトの負荷係数は0.75であります

HashSetのソースコード解析:JDKのソースシリーズ

指定されたコレクションの要素

HashSetのソースコード解析:JDKのソースシリーズ

4.追加

HashSetのソースコード解析:JDKのソースシリーズ

これは、キーとデフォルト値が存在するMAPDとして追加される要素を追加HashSetのを使用するように置くの要素を見ることができます。挿入されたキー値が存在しない場合、記事はHashMapのPUTメソッドを導入し、それはそれ以外の場合は、判断をしたので、ここで、値が既に存在返すnullを返します。それは非常に簡単ではありません。

5.検索

HashSetのソースコード解析:JDKのソースシリーズ

偽リターンの欠如がある場合にはHashMapのcontainsKeyメソッドと呼ばれる要素がtrueを返して下さい。

6.削除

HashSetのソースコード解析:JDKのソースシリーズ

削除方法は、また、removeメソッドマップを呼び出して、私たちはHashSetのは、HashMapの上のすべての依存している見る場所を確認します。

7.反復法

HashSetのソースコード解析:JDKのソースシリーズ

地図はまた、イテレータを返すために、キーのkeySetを使用することによって達成されます。

8.おわり

その後、基本的にはソースコードが読み取られた場合のHashSetはHashMapの、ハッシュマップによって実現され、物事の実際には、いくつかの、問題ありません。(これはおそらく、最もリラックスしている私は、ハッハッハ求めて記事を書きました)

おすすめ

転載: blog.51cto.com/14465400/2423047