基本介绍
Set接口是 Collection 接口的子接口
- 无序(添加和取出的顺序不一致),没有索引;
- 不允许重复元素,所以最多包含一个null;
常用方法
boolean add(E e); // 插入e元素
boolean contains(Object o); // 判断是否存在
Object[] toArray(); // 转成数组
boolean remove(Object o); // 移除指定元素
遍历
List set = new HashSet<>();
set.add(1);
set.add("张三");
// 1. 迭代器
Iterator iterator = set.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
System.out.println("================================================");
// 2. 增强for循环
for (Object o : list) {
System.out.println(o);
}
HashSet基本介绍
- HashSet底层是一个HashMap;
- 添加一个元素时,会显得到一个hash值=》转换层索引值;
- 找打存储数据表table,看这个索引位置是否已经存放元素;
- 如果没有,直接加入;
- 如果有,调用equals比较,如果相同就放弃添加,如果不相同则添加到最后;
- 在Java8中,如果一条链表的元素个数到
TREEIFY_THRESHOLD(8),并且table的大小>= MIN_TREEIFY_CAPACITY(64)数据结构转为红黑树;
LinkedHashSet基本介绍
- LinkedHashSet是HashSet的一个子类;
- LinkedHashSet底层是一个LinkedHashMap,底层维护了一个数据+双向链表;
- LinkedHashSet根据元素的hashCode值来决定元素的存储位置,同时使用链表维护元素的次序,这使得元素看起来是以插入顺序保存的;
- LinkedHashSet不允许重复添加元素;