set接口方法(数组+链表+红黑树)
基本介绍
- 无序,无索引
- 不允许重复元素,最多包含一个null
底层级制
- HashSet底层是HashMap
- 添加一个元素时,先得到hash值—会转成—>索引值
- 找到存储数据表table,看这个索引位置是否已经存放有元素
- 如果没有,直接加入
- 如果有,调用equals比较,如果相同,则放弃添加,如果不相同,则添加到最后
- 在java8中,如果一条链表的元素个数>=TREEIFY_THRESHOLD(默认值为8),并且table的大小>=MIN_TREEIFY_CAPACITY(默认值64),就会进行树化(红黑树)
LinkedHashSet
基本介绍
- LinkedHashSet是HashSet的子类
- LinkedHashSet底层是一个LinkedHashMap,底层维护一个数组+双向链表
- LinkedHashSet根据元素的hashCode值来决定元素的存储位置,同时使用链表维护元素的次序,这使得元素看起来是以插入顺序保存的
- LinkedHashSet不允许添重复元素
public class Demo06 {
public static void main(String[] args) {
Set set = new LinkedHashSet();
set.add(new String("AA"));
set.add(456);
set.add(456);
set.add(new Customer("刘",1001));
set.add(123);
set.add("Bob");
System.out.println("set="+set);
}
}
class Customer {
private String name;
private int no;
public Customer(String name, int no) {
this.name = name;
this.no = no;
}
}