set
public interface Set<E> extends Collection<E>
不包含重复元素的集合。
继承方法请看 Collection
boolean add(E e) 如果指定的元素不存在,则将其指定的元素添加。
boolean addAll(Collection<? extends E> c) 将指定集合中的所有元素添加到此集合(如果尚未存在)。
HashSet
public class HashSet<E> extends AbstractSet<E>
用哈希储存的set集合 底层是HashMap储存的 特点: Set取值时不保证数据和存入的时候顺序一致,不允许重复值
构造方法 初始化一个HashMap 用来储存数据
private transient HashMap<E,Object> map;
public HashSet() {
map = new HashMap<>();
}
boolean add(E e) 添加HashMap数据 e添加到map对应的key中 value添加一个null对象
private static final Object PRESENT = new Object();
public boolean add(E e) {
return map.put(e, PRESENT)==null;
}
boolean remove(Object o)
利用map删除key值 然后把删除的值 =null 用于gc
public boolean remove(Object o) {
return map.remove(o)==PRESENT;
}
TreeSet
此类实现Set接口,实现基于TreeMap 可以实现排序等功能的集合
特点 储存的数值必须提供比较器 内部根据比较器自动排序 保持集合有序性
LinkedHashSet
哈希表和链表实现了Set接口,具有可预测的迭代次序.
特点 链表来保持插入顺序,不过为了提高查询效率,也使用了散列。