HashSet、TreeSet、LinkedHashSet
Set
set接口是一种不包括重复元素的Collection,它维持它自己的内部排序,所以随机访问没有任何意义。
1.HashSet
private transient HashMap<E,Object> map;
//用作value值
private static final Object PRESENT = new Object();
底层其实就是HashMap,只是用一个空的Object对象作为HashMap的value。
方法
调用的就是HashMap的方法
迭代器
public Iterator<E> iterator() {
return map.keySet().iterator();
}
底层调用HashMap的keySet返回所有的key
去重原理
调用hashcode()和equals()方法实现去重,因为HashMap中不允许key值重复,因此保证了HashSet中的元素不重复。
2.TreeSet
底层其实就是TreeMap,只是用一个空的Object对象作为TreeMap的value。
3.LinkedHashSet
public LinkedHashSet() {
super(16, .75f, true);
}
HashSet(int initialCapacity, float loadFactor, boolean dummy) {
map = new LinkedHashMap<>(initialCapacity, loadFactor);
}
``
底层其实就是LinkedHashMap,通过调用HashSet的一个构造方法来创建LinkedHashMap。