Java集合(10)--HashSet源码分析
由 哈希表 实现,实际底层为 HashMap。 public HashSet(Collection<? extends E> c) { map = new HashMap<E,Object>(Math.max((int) (c.size()/.75f) + 1, 16)); addAll(c); } public HashSet(int initialCapacity, float loadFactor) { map = new HashMap<E,Object>(initialCapacity, loadFactor); } public boolean add(E e) { return map.put(e, PRESENT)==null; } PRESENT :傀儡值,Object类型,做 判断是否包含过用 Map的 key存的对象 就是 Set中的值 ,这块 就是为什么Set不能存储重复元素的原因。 -1, Set :存入Set的每个元素必须是 唯一 的。加入Set的元素必须定义 equals方法,以确保其唯一性 。Set接口 不保证 维护元素的 顺序 。 -2, HashSet :为 快速查找 而设计的Set。存入HashSet的 元素必须实现hashCode 方法。HashSet是使用 Set的默认首选 。 -3, TreeSet : 保持次序的Set ,底层为 树结构