1,认识HashSet
底层实现原理:使用哈希表来支持
HashSet特点:
1.不允许存储重复的元素
2.没有索引,没有带索引的方法,也不能使用普通的for循环遍历
3.是一个无序的集合,存储元素和取出元素的顺序有可能不一直
4.底层是一个哈希表结构(查询的速度非常的快)
2,类图关系
3,走进源码
- 数据结构
private transient HashMap<E,Object> map;
//虚拟值与后勤图中的对象相关联(虚拟对象,作为value放到map中)
private static final Object PRESENT = new Object();
3.1构造函数
- 一个空参构造函数
public HashSet() {
//初始化哈希表
map = new HashMap<>();
}
- 基于一个集合来构造一个新的集合
public HashSet(Collection<? extends E> c) {
map = new HashMap<>(Math.max((int) (c.size()/.75f) + 1, 16));
addAll(c);
}
- 构造一个新的空集;支持 HashMap </ tt>实例具有指定的初始容量和指定的负载系数
public HashSet(int initialCapacity, float loadFactor) {
map = new HashMap<>(initialCapacity, loadFactor);
}
- 构造一个新的空集;支持 HashMap </ tt>实例具有指定的初始容量和默认负载因子(0.75)
public HashSet(int initialCapacity) {
map = new HashMap<>(initialCapacity);
}
3.2添加元素
public boolean add(E e) {
return map.put(e, PRESENT)==null;
}
3.3删除元素
- 删除指定元素
public boolean remove(Object o) {
return map.remove(o)==PRESENT;
}
- 全部清除
public void clear() {
map.clear();
}
3.4迭代器
public Iterator<E> iterator() {
return map.keySet().iterator();
}
map.put() map.remove(o) map.clear()
都是HashMap的方法,具体源码请看深入理解HashMap
3.5查找
在Hashmap中,没有发现类型get()方法,不过有contains(方法),查找是否存在指定的key
public boolean contains(Object o) {
return map.containsKey(o);
}