类结构
HashSet类层级关系图:
HashSet实现了Set接口,为什么叫HashSet?因为HashSet内部采用哈希表(实际就是HashMap)来存储不重复的数据,查看HashSet内部属性:
1 | // 使用HashMap存储数据,HashSet的数据实际为HashMap的key |
HashMap的key是不允许重复的,这也正好符合Set的特性。因为HashSet内部采用HashMap存储数据,所以HashSet可以存储null值,支持快速失败,非线程安全。
map属性通过transient修饰,原因在介绍HashMap源码的时候分析过。
方法解析
构造函数
1 | // 空参构造函数,内部初始化map属性 |
可以看到,创建HashSet的本质就是初始化HashMap。
add(E e)
add(E e)
添加指定元素:
1 | public boolean add(E e) { |
contains(Object o)
contains(Object o)
判断是否包含指定元素:
1 | public boolean contains(Object o) { |
size()
size()
获取元素个数:
1 | public int size() { |
isEmpty()
isEmpty()
判断集合是否为空:
1 | public boolean isEmpty() { |
remove(Object o)
remove(Object o)
删除指定元素:
1 | public boolean remove(Object o) { |
clear()
clear()
清空集合:
1 | public void clear() { |
iterator()
iterator()
获取迭代器:
1 | public Iterator<E> iterator() { |