6.1、對於HashSet需要掌握以下幾點HashSet的創建:HashSet()往HashSet中添加單個對象:即add(E)方法刪除HashSet中的對象:即remove(Object key)方法判斷對象是否存在於HashSet中:containsKey(Object key)註:HashSe...
6.1、對於HashSet需要掌握以下幾點
- HashSet的創建:HashSet()
- 往HashSet中添加單個對象:即add(E)方法
- 刪除HashSet中的對象:即remove(Object key)方法
- 判斷對象是否存在於HashSet中:containsKey(Object key)
註:HashSet沒有獲取單個對象的方法,需要使用iterator
6.2、構建HashSet
源代碼:
//HashSet底層數據結構:通過hashmap的key不可重覆的原則,使得存放入HashSet中的值不重覆 private transient HashMap<E, Object> map; //預設的hashmap的value private static final Object PRESENT = new Object(); /** * 可存放16個元素 */ public HashSet() { map = new HashMap<E, Object>(); } /** * 指定hashset的容量和負載因數 */ public HashSet(int initialCapacity, float loadFactor) { map = new HashMap<E, Object>(initialCapacity, loadFactor); } /** * 指定hashset的容量 */ public HashSet(int initialCapacity) { map = new HashMap<E, Object>(initialCapacity); }View Code
註:HashSet的底層是HashMap,其依靠HashMap的key不可重覆,來保證將來加入到HashSet中的元素也不重覆(會將元素作為key放到hashmap中,參照6.3)。
6.3、add(E e)
源代碼:
add(E e)
/** * 往set中添加值 */ public boolean add(E e) { //查看hashmap的put方法,若覆蓋已有key的舊值,會返回舊值;若沒有相應的key則返回null return map.put(e, PRESENT) == null; }View Code
註意:這裡調用了HashMap的put(K key, V value)
6.4、remove(Object key)
源代碼:
/** * 刪除指定元素 */ public boolean remove(Object o) { return map.remove(o) == PRESENT; }View Code
註:這裡調用了HashMap的remove(Object key)
6.5、contains(Object key)
源代碼:
/** * set中是否包含指定元素 */ public boolean contains(Object o) { return map.containsKey(o); }View Code
註意:這裡調用了HashMap的containsKey(Object key)
總結:
- HashSet底層就是HashMap
- 其依靠HashMap的key不可重覆,來保證將來加入到HashSet中的元素也不重覆(會將元素作為key放到hashmap中)
- HashSet線程不安全
HashMap源碼解析:
http://www.cnblogs.com/java-zhao/p/5106189.html