1.set
集合元素有序不重复,创建set集合 Set set = new HashSet();
循环遍历方法(3种):跟collection相同, 但不能使用ListIterator对象(不是List或它的实现 类),也不能用for循环遍历,没有下标和get方法
2.HashSet
去重的原理 : 根据元素的hashCode确定在集合中的位置,如果位置上不存在元素,则直接存入;
如果位置上存在数据,则调用equals方法进行比较。如果返回值是true, 则不存入新 的元素;如果返回值是false, 则存入新的元素
无序不重复:按照数据的hashCode的值进行存储上的排序,和存入的顺序无关
如果hashSet中需要保存的是一个自定义的类的话,对于存放在HashSet中的对象有一个要求: 对应的类中必须重写hashCode和equals方法。如下:
把学生信息(姓名 ,性别,年龄)存放到HashSet集合中
例1:从键盘录⼊⼀⾏数据, 去掉其中重复的字符,打印结果
例2:产⽣10个随机的字符串, 要求不能重复(字符串中的字符取值在 'a' 到 'z' , 'A' 到 'Z' ,'0' 到 '9'),字符串的⻓度1-20
3.LinkedHashSet
有序不重复:按照存入的顺序进行数据的存储,不会重新排序
例:从键盘录⼊⼀⾏字符串, 去掉其中重复的字符,打印结果,并告知一共重复了多少个字符, 不需要改变字符的顺序
4.TreeSet
构造方法(无参、有参):
当前对象的属性 - 参数对象的属性 : 从小到大 参数对象的属性 - 当前对象的属性: 从大到小
例:有参
Comparable和Comparator的区别:
a. 使用上: Comparable必须让元素自己实现这个接口
Comparator不需要元素自己实现,可以由一个类单独完成
b. 排序规则上: 对于实现了Comparable的类, 每一次的排序都只能使用同一个规则(实现的 compareTo方法)
对于Comparator来说,就算是同一种元素,也可以存在多个单独的比较器对象, 在不同的地方使用不同的排序规则
c. 对于类的要求上: Comparable接口要求这个类必须可以编辑可以修改,才能完成实现这个类的 操作Comparator接口,没有这个要求 -- 因为他不需要改动原本的代码
d. 是否可以当做参数使用: Comparable接口 不可以
Comparator接口 可以 -- 可以在多个方法中以参数形式出现
方法:
first,last:获取其中的第一个元素 和最后一个元素, 仅仅是一个查看的操作,不是一个移除的操 作
pollFirst,pollLast:移除并且获取指定位置的元素, 是一个移除的操作,会影响集合的长度
floor(参:指定字符):返回的是集合中小于等于给定元素的最大的数据, 如果不存在则返回null
higher(参:指定字符):返回的是集合中大于给定元素的最小的数据,如果不存在则返回null