Set <String> s= new HashSet<>();
System.out.println(s.add(""));//ture
System.out.println(s.add(""));//false
//第一次添加成功,第二次失败,可以利用set去重
遍历方式
通用集合遍历方式,可以根据下方链接前往
HashSet :
底层采用哈希表存储数据
哈希表是一种增删改查性能都比较好的结构
哈希表组成
JDK8以前
数组+链表
之后
数组+链表+红黑树
上面的是根据哈希值计算出数据在数组中应存入的位置
hashcoad方法在object类中
哈希值是根据hashcoad方法进行计算,默认使用地址值,通常会重写hashcoad方法,利用属性值计算哈希值
如果没有重写,不同对象计算出的值是不一样的,重写了属性相同的对象哈希值相等
小部分情况下,不同属性值或不同地址值计算出的哈希值也可能一样(哈希碰撞)
LinkHashSet
底层仍然是哈希表,多了一个双链表存储顺序,保证存入取出的同序性
TreeSet
底层是红黑树,增删改查性能都较好,可以进行排序
默认排序规则
添加时,得指定比较规则
方法一:javabean实现comparable方法,重写里面compareTo方法
o表示红黑树中已经存在的对象
this表示当前的对象
方法二:创建对象时候传递comparator比较器
当系统排序不能满足要求,例如排序字符串时可以使用