1. Set接口的特点
a:它是个不包含重复元素的collection。<br /> b:Set集合取出元素的方式可以采用:Iterator、foreach。<br /> c:Set集合有多个子类,这里我们介绍其中的HashSet、LinkedHashSet这两个集合。
2. Set特有的方法
- A U B Union: setA.addAll(setB)
- A ∩ B Interaction: setA.retainAll(setB)
A - B Different : seetA.removeAll(setB)
3. HashSet
实现Set接口,由哈希表支持(实质上是一个HashMap). 它不保证set的迭代顺序:特别是它不保证该顺序恒久不变。此类允许使用null元素。
A. HashSet集合的自身特点:
HashSet底层是采用HashMap实现的。
- 存储,取出都比较快
- 线程不安全,运行速度快
- Hash value 是存入HashSet的依据
B. HashSet 与 HashMap的关系
1、HashSet底层是采用HashMap实现的。HashSet 的实现比较简单,HashSet 的绝大部分方法都是通过调用 HashMap 的方法来实现的,因此 HashSet 和 HashMap 两个集合在实现本质上是相同的。
2、HashMap的key就是放进HashSet中对象,value是Object类型的。
3、当调用HashSet的add方法时,实际上是向HashMap中增加了一行(key-value对),该行的key就是向HashSet增加的那个对象,该行的value就是一个Object类型的常量。C. HashSet的存储过程
和HashMap一样,HashSet采用哈希算法,底层用数组存储数据。默认初始化容量16,加载因子0.75。
- 继承自HashSet,与HashSet不同之处是:LinkedHashSet维护着一个运行于所有条目的双重链表。这个双向列表定义了迭代顺序,即按照将元素插入到set中的顺序进行迭代。
- 有序,存储和取出顺序相同
- 线程不安全,运行速度快
