<java API源码初体验>4---collection集合之HashSet原理分析
来源:互联网 发布:乐高ev3编程 编辑:程序博客网 时间:2024/06/05 01:53
java的HashSet是由HashMap的key组成的,用的增删改查的方法均基于HashMap的key。
根据HashMap保证了key的唯一性。
public boolean add(E e) { return map.put(e, PRESENT)==null; }
它的add()方法,用的就是HashMap里面的put()方法。
若map中已存在e,则返回false;若不存在,则表示map中没有该key,表示加入成功,返回true。
public V put(K key, V value) { if (key == null) return putForNullKey(value); int hash = hash(key); int i = indexFor(hash, table.length); for (Entry<K,V> e = table[i]; e != null; e = e.next) { Object k; if (e.hash == hash && ((k = e.key) == key || key.equals(k))) { V oldValue = e.value; e.value = value; e.recordAccess(this); return oldValue; } } modCount++; addEntry(hash, key, value, i); return null; }
而put方法,是根据key的哈希值,和equals方法来保证唯一性的,如果原key对应数组位置的链表中存在该key值,那么意味着hashcode,e.key.equals(key)均相等,则key不变,只改变key对应的value。若不存在,则将新key插入到链头。
为了保证key的唯一性,我们必须要在加入或进行其他操作之前,必须对key的hashCode(),equals()方法进行重写,并且保证对比的两个对象哈希值相同的情况下,他们的equals方法返回值也为true,保证他们的一致性。这样就可以实现并保证key的不重复了!
0 0
- <java API源码初体验>4---collection集合之HashSet原理分析
- <java API源码初体验>1---collection集合之ArrayList原理分析
- <java API源码初体验>2---collection集合之LinkedList原理分析
- <java API源码初体验>3---collection集合之HashMap原理分析
- Java集合系列之HashSet源码分析
- Java集合之HashSet源码分析
- Java集合之HashSet,LinkedHashSet源码分析
- Java集合框架之Set--HashSet源码分析
- Java源码分析之HashSet
- java源码分析之HashSet
- java源码分析之集合架构 Collection 02
- Java集合---HashSet的源码分析
- Java集合---HashSet的源码分析
- java集合(5):HashSet源码分析
- Java集合---HashSet的源码分析
- Java集合---HashSet的源码分析
- Java集合---HashSet的源码分析
- Java集合---HashSet的源码分析
- C#对象序列化与反序列化
- ubuntu安装texlive2014及设置环境变量-wd
- IC工程师发展方向探究
- Incomplete reply from server
- 变量
- <java API源码初体验>4---collection集合之HashSet原理分析
- CentOS6.5 下安装vim7
- 利用一致性哈希水平拆分MySql单表
- Java的类成员变量,实例变量,类变量,成员方法,实例方法,类方法
- R语言︱画图
- git服务器搭建及权限控制
- copy weak strong assign等等
- iOS 基于 MVC 的项目重构总结
- 奔溃日志记录工具Crashlytics