此文已由作者赵计刚授权网易云社区发布。
欢迎访问网易云社区,了解更多网易技术产品运营经验。
6.1、对于HashSet需要掌握以下几点
注: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); }
注:HashSet的底层是HashMap,其依靠HashMap的key不可重复,来保证将来加入到HashSet中的元素也不重复(会将元素作为key放到hashmap中,参照6.3)。
6.3、add(E e)
源代码:
add(E e)
注意:这里调用了HashMap的put(K key, V value)
6.4、remove(Object key)
源代码:
/** * 删除指定元素 */ public boolean remove(Object o) { return map.remove(o) == PRESENT; }
注:这里调用了HashMap的remove(Object key)
6.5、contains(Object key)
源代码:
/** * set中是否包含指定元素 */ public boolean contains(Object o) { return map.containsKey(o); }
注意:这里调用了HashMap的containsKey(Object key)
总结:
HashMap源码解析:
http://www.cnblogs.com/java-zhao/p/5106189.html
免费领取验证码、内容安全、短信发送、直播点播体验包及云服务器等套餐
更多网易技术、产品、运营经验分享请点击。