ホームページ  >  記事  >  Java  >  Core Java の HashSet の簡単な紹介

Core Java の HashSet の簡単な紹介

黄舟
黄舟オリジナル
2017-09-19 11:43:191799ブラウズ

以下のエディターは、HashSet について簡単に説明する Core Java 記事を提供します (推奨)。編集者はこれがとても良いものだと思ったので、皆さんの参考として今から共有します。編集者に従って、学生がこの質問を読んでいるときに見てみましょう。まず、私が 2 つの質問をします。その後、質問をしながらこの記事を読むと、全員がよりよく理解できるようになります。

1. 要素を追加するときに HashSet が重複した要素を追加できないのはなぜですか?

2. HashSet は null 要素を追加しますか? ソース コードを開くと、次のコードが表示されます。HashSet にも属性として HashMap があり、HashSet() の構築メソッドはこのマップをインスタンス化することであることがわかります。 HashMap について知らない場合は、私のこのブログ投稿を読んでください。また、静的な Final オブジェクト PRESENT があることに注意してください。これは何に使用されるのでしょうか。

private transient HashMap<E,Object> map;

 // Dummy value to associate with an Object in the backing Map
 private static final Object PRESENT = new Object();

 /**
  * Constructs a new, empty set; the backing <tt>HashMap</tt> instance has
  * default initial capacity (16) and load factor (0.75).
  */
 public HashSet() {
  map = new HashMap<>();
 }

次に、要素 e を HashMap に配置し、静的最終オブジェクト PRESENT を値として配置する add メソッドを開きます。追加が成功すると、HashMap は null を返します。はい、前回のブログ記事でも説明しましたが、復習としてもう一度説明しましょう。要素が HashMap に配置されている場合、その hashCode が最初に判断され、hashCode が見つからない場合は、hashCode に基づいてインデックスが計算され、hashCode が同じである場合は 2 番目の判断に基づいて配置されます。キーが等しいかどうか、および対応するバケットに配置されているかどうかを判断します。それはリンクされたリストにあります。

/**
  * Adds the specified element to this set if it is not already present.
  * More formally, adds the specified element <tt>e</tt> to this set if
  * this set contains no element <tt>e2</tt> such that
  * <tt>(e==null ? e2==null : e.equals(e2))</tt>.
  * If this set already contains the element, the call leaves the set
  * unchanged and returns <tt>false</tt>.
  *
  * @param e element to be added to this set
  * @return <tt>true</tt> if this set did not already contain the specified
  * element
  */
 public boolean add(E e) {
  return map.put(e, PRESENT)==null;

もちろん、学生たちは 2 番目の質問も考えました。hashMap は null キーをサポートしているため、HashSet は null キーを持つ要素を追加することもできます。 HashMap は非常に多くの場所で使用されており、それがどれほど重要であるかご存知ですか? !

以上がCore Java の HashSet の簡単な紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。