ソース読解-HashSet
2905 ワード
本文中の関連
実装 要素の格納順序が保証されていない
コンストラクション関数で初期化
同様に、
遍歴は遍歴
HashSetソースbuild 1.8.0_121-b 13版
HashMap
の知識はHashMapソースコードを参考にして読む0.HashSetって何?
Set
インターフェースなので、要素は重複せず、最大1個null
要素1.実現の本質
HashSet
はHashMap
によってエレメントを格納するものであり、それによっても保証されるKey
の一意性はこれHashMap
に格納すべきエレメントはKey
PRESENT
として格納するValue
として格納するprivate transient HashMap map;
// Dummy value to associate with an Object in the backing Map
private static final Object PRESENT = new Object();
2.主なapi解析
2.1コンストラクタ
コンストラクション関数で初期化
HashMap
、そのうちcapacity
およびloadFactor
も指定HashMap
のcapacity
およびloadFactor
です.public HashSet()
public HashSet(int initialCapacity)
public HashSet(int initialCapacity, float loadFactor)
public HashSet(Collection extends E> c)
2.2 addメソッド
map
に1つのエレメントが格納されているkey
格納が必要なエレメントであるvalue
はいPRESENT
中HashMap
は一意であるためkey
のエレメントは一意であり重複はできない/**
* Adds the specified element to this set if it is not already present.
* More formally, adds the specified element e to this set if
* this set contains no element e2 such that
* (e==null ? e2==null : e.equals(e2)).
* If this set already contains the element, the call leaves the set
* unchanged and returns false.
*
* @param e element to be added to this set
* @return true if this set did not already contain the specified
* element
*/
public boolean add(E e) {
return map.put(e, PRESENT)==null;
}
2.3 removeメソッド
同様に、
Set
メソッドもremove
から要素を削除/**
* Removes the specified element from this set if it is present.
* More formally, removes an element e such that
* (o==null ? e==null : o.equals(e)),
* if this set contains such an element. Returns true if
* this set contained the element (or equivalently, if this set
* changed as a result of the call). (This set will not contain the
* element once the call returns.)
*
* @param o object to be removed from this set, if present
* @return true if the set contained the specified element
*/
public boolean remove(Object o) {
return map.remove(o)==PRESENT;
}
2.4遍歴
遍歴は遍歴
map
のmap
/**
* Returns an iterator over the elements in this set. The elements
* are returned in no particular order.
*
* @return an Iterator over the elements in this set
* @see ConcurrentModificationException
*/
public Iterator iterator() {
return map.keySet().iterator();
}