国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

HashSet

2019-11-14 21:54:06
字體:
來源:轉載
供稿:網友
HashSetHashSet

HashSet實現Set接口。它不保證set 的迭代順序;特別是它不保證該順序恒久不變。此類允許使用null元素。

實現

基于HashMap實現的,HashSet底層使用HashMap來保存所有元素,因此HashSet 的實現比較簡單,相關HashSet的操作,基本上都是直接調用底層HashMap的相關方法來完成。

Code
public class HashSet<E>      extends AbstractSet<E>      implements Set<E>, Cloneable, java.io.Serializable

繼承AbstractSet,實現Set、克隆、序列化。

構造函數
/**      * 默認的無參構造器,構造一個空的HashSet。      *       * 實際底層會初始化一個空的HashMap,并使用默認初始容量為16和加載因子0.75。      */      public HashSet() {      map = new HashMap<E,Object>();      }
/**      * 構造一個包含指定collection中的元素的新set。      *      * 實際底層使用默認的加載因子0.75和足以包含指定      * collection中所有元素的初始容量來創建一個HashMap。      * @param c 其中的元素將存放在此set中的collection。      */      public HashSet(Collection<? extends E> c) {      map = new HashMap<E,Object>(Math.max((int) (c.size()/.75f) + 1, 16));      addAll(c);      }
/**      * 以指定的initialCapacity和loadFactor構造一個空的HashSet。      *      * 實際底層以相應的參數構造一個空的HashMap。      * @param initialCapacity 初始容量。      * @param loadFactor 加載因子。      */      public HashSet(int initialCapacity, float loadFactor) {      map = new HashMap<E,Object>(initialCapacity, loadFactor);      }
/**      * 以指定的initialCapacity構造一個空的HashSet。      *      * 實際底層以相應的參數及加載因子loadFactor為0.75構造一個空的HashMap。      * @param initialCapacity 初始容量。      */      public HashSet(int initialCapacity) {      map = new HashMap<E,Object>(initialCapacity);      }
/**      * 以指定的initialCapacity和loadFactor構造一個新的空鏈接哈希集合。      * 此構造函數為包訪問權限,不對外公開,實際只是是對LinkedHashSet的支持。      *      * 實際底層會以指定的參數構造一個空LinkedHashMap實例來實現。      * @param initialCapacity 初始容量。      * @param loadFactor 加載因子。      * @param dummy 標記。      */      HashSet(int initialCapacity, float loadFactor, boolean dummy) {      map = new LinkedHashMap<E,Object>(initialCapacity, loadFactor);      }
迭代,迭代器
/**      * 返回對此set中元素進行迭代的迭代器。返回元素的順序并不是特定的。      *       * 底層實際調用底層HashMap的keySet來返回所有的key。      * 可見HashSet中的元素,只是存放在了底層HashMap的key上,      * value使用一個static final的Object對象標識。      * @return 對此set中元素進行迭代的Iterator。      */      public Iterator<E> iterator() {      return map.keySet().iterator();      }
添加
// 定義一個虛擬的Object對象作為HashMap的value,將此對象定義為static final。      PRivate static final Object PRESENT = new Object();
/**      * 如果此set中尚未包含指定元素,則添加指定元素。      * 更確切地講,如果此 set 沒有包含滿足(e==null ? e2==null : e.equals(e2))      * 的元素e2,則向此set 添加指定的元素e。      * 如果此set已包含該元素,則該調用不更改set并返回false。      *      * 底層實際將該元素作為key放入HashMap。      * 由于HashMap的put()方法添加key-value對時,當新放入HashMap的Entry中key      * 與集合中原有Entry的key相同(hashCode()返回值相等,通過equals比較也返回true),      * 新添加的Entry的value會將覆蓋原來Entry的value,但key不會有任何改變,      * 因此如果向HashSet中添加一個已經存在的元素時,新添加的集合元素將不會被放入HashMap中,      * 原來的元素也不會有任何改變,這也就滿足了Set中元素不重復的特性。      * @param e 將添加到此set中的元素。      * @return 如果此set尚未包含指定元素,則返回true。      */      public boolean add(E e) {      return map.put(e, PRESENT)==null;      }
刪除&清空
/**      * 如果指定元素存在于此set中,則將其移除。      * 更確切地講,如果此set包含一個滿足(o==null ? e==null : o.equals(e))的元素e,      * 則將其移除。如果此set已包含該元素,則返回true      * (或者:如果此set因調用而發生更改,則返回true)。(一旦調用返回,則此set不再包含該元素)。      *      * 底層實際調用HashMap的remove方法刪除指定Entry。      * @param o 如果存在于此set中則需要將其移除的對象。      * @return 如果set包含指定元素,則返回true。      */      public boolean remove(Object o) {      return map.remove(o)==PRESENT;      }        /**      * 從此set中移除所有元素。此調用返回后,該set將為空。      *      * 底層實際調用HashMap的clear方法清空Entry中所有元素。      */      public void clear() {      map.clear();      }
其他
/**      * 返回此HashSet實例的淺表副本:并沒有復制這些元素本身。      *      * 底層實際調用HashMap的clone()方法,獲取HashMap的淺表副本,并設置到HashSet中。      */      public Object clone() {          try {              HashSet<E> newSet = (HashSet<E>) super.clone();              newSet.map = (HashMap<E, Object>) map.clone();              return newSet;          } catch (CloneNotSupportedException e) {              throw new InternalError();          }      }
/**      * 返回此set中的元素的數量(set的容量)。      *      * 底層實際調用HashMap的size()方法返回Entry的數量,就得到該Set中元素的個數。      * @return 此set中的元素的數量(set的容量)。      */      public int size() {      return map.size();      }
/**      * 如果此set不包含任何元素,則返回true。      *      * 底層實際調用HashMap的isEmpty()判斷該HashSet是否為空。      * @return 如果此set不包含任何元素,則返回true。      */      public boolean isEmpty() {      return map.isEmpty();      }
我是天王蓋地虎的分割線
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 娱乐| 信宜市| 龙海市| 广东省| 长子县| 南澳县| 共和县| 阜平县| 兴安盟| 清水河县| 台北市| 高平市| 商河县| 遂平县| 周口市| 阿合奇县| 勐海县| 周宁县| 江陵县| 墨玉县| 襄汾县| 广宁县| 神农架林区| 若尔盖县| 常山县| 仁寿县| 揭阳市| 邵武市| 彩票| 白水县| 胶州市| 静海县| 城口县| 桐城市| 荥经县| 同德县| 荥经县| 莱西市| 奈曼旗| 彰化市| 洱源县|