特点:无序 不允许重复
实现类:
HashSet :通过hash码数据结构进行存储的,无序,不重复。如果判断两个对象是否是同一个对象,通常情况比较地址,但是现在需要通过制定内容来判断是否相同。
hashCode():判断其各个属性的hashcode 而非对象的真正地址
结论:如果hashcode相同 有可能是相同的对象,hashcode不同,则一定不是同一个对象,hashcode相同还需要equals进一步判断。
equals():根据自己的规律去判断是否认为此两个对象是相同对象
比如:如果姓名和年龄都相同,就认为是同一个对象
调用过程 首先调用hashcode方法 如果返回值相同则调用equals方法,如果返回值不同,则不调用equals 直接认为不是同一对象
LinkedHashSet: 不允许重复的,存储的是双向链表,帮助记录存储的顺序,LinkedHashSet再去遍历的时候要比HashSet效率高 ,但是在添加或者删除修改的时候其效率要低(因为其记录顺序要耗费时间)
TreeSet
无序不允许重复的
用的红黑数的数据结构存储的,默认情况下Integer String 都实现了自然排序,是按自然排序的大小进行排序
如果自定义的类想要添加TreeSet集合中就必须 实现 Comparable 或者 Comparator
如果实现Comparable 就是自然排序
Comparator 就是定制排序
自然排序的步骤
1.定义bean类 实现Comparable接口并且重写 compareTo方法
2。测试
定制排序的步骤:
1 定义bean类
创建一个类 去实现Comparator接口 并且重写compare方法
创建TreeSet对象 往构造方法中传递。
TreeSet:
7.TreeSet 自然排序 定制排序
方法remove 和 first 是自然排序之后的
floor小于等于指定的最大值
lower严格小于指定的元素的最大值
higher 大于指定元素的最小值
pollFirst获取并移除集合中的第一个元素
headset 返回比指定元素小的集合
tailset返回比指定元素大于等于的集合
subSet截止指定范围内的集合 左闭右开
8.TreeSet跟存储的顺序不同 是根据存入的实际的大小去排序的 根据hashcode和equals的返回值类型确定元素存储的位置 根据红黑树存储的
9.treeset存放自定义的类 实现排序
如果向treeset众取放自己定义类型的对象 类型必须去实现compareable接口 否则报错
10,比较的时候如果本对象去调用compareto方法及时升序 参数调用compareto就是降序
如果本对象的属性大于参数对象的就返回 >0
小于 <0
11.升序:
本身属性 - 参数属性 = 正数 返回值为1
降序
本身属性 - 参数属性 = 负数 返回值为-1
12.中文排序 CollationKey key = Collator.getInstance().getCollationKey();