一.概述
Set集合与List一样,都是继承自Collection接口,常用的实现类有HashSet和TreeSet。值得注意的是,HashSet是通过HashMap来实现的而TreeSet是通过TreeMap来实现的,所以HashSet和TreeSet都没有自己的数据结构,具体可以归纳如下:
1. Set集合中的元素不能重复,即元素唯一
2. HashSet按元素的哈希值存储,所以是无序的,并且最多允许一个null对象
3. TreeSet按元素的大小存储,所以是有序的,并且不允许null对象
4. Set集合没有get方法,所以只能通过迭代器(Iterator)来遍历元素,不能随机访问
二. HashSet源码分析
基础属性
static final long serialVersionUID = -5024744406713321676L;
private transient HashMap<E,Object> map;
// Dummy value to associate with an Object in the backing Map
//Object类型的引用PRESENT则是对应于map中的value的一个虚拟值,没有实际意义。
private static final Object PRESENT = new Object();
观察源码,我们知道HashSet的数据是存储在HashMap的实例对象map中的,并且对应于map中的key,而Object类型的引用PRESENT则是对应于map中的value的一个虚拟值,没有实际