set集合

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

构造方法(无参、有参):

无参:TreeSet() 构造⼀个新的空set, 该set根据其元素的⾃然顺序进⾏排序。Comparable接口的               compareTo方法,就是引用数据类型的自然排序规则。在compareTo方法中,可以按照需               要的标准进行规则的指定
有参:TreeSet(参:Comparator比较器对象) 构建⼀个空的TreeSet, 他根据指定⽐较器进行排序。             需要一个自定义的比较器类去实现Comparator接口,实现compare方法。在compare方                   法中,可以按照需要的标准进行规则的指定
同时存在Comparator和Comparable的话,优先使用Comparator接口
例:无参
当前对象的属性 - 参数对象的属性 : 从小到大
参数对象的属性 - 当前对象的属性: 从大到小

例:有参

 

Comparable和Comparator的区别:
a. 使用上: Comparable必须让元素自己实现这个接口
                   Comparator不需要元素自己实现,可以由一个类单独完成
b. 排序规则上: 对于实现了Comparable的类, 每一次的排序都只能使用同一个规则(实现的                                 compareTo方法)
                          对于Comparator来说,就算是同一种元素,也可以存在多个单独的比较器对象,                           在不同的地方使用不同的排序规则
c. 对于类的要求上: Comparable接口要求这个类必须可以编辑可以修改,才能完成实现这个类的                                    操作Comparator接口,没有这个要求 -- 因为他不需要改动原本的代码
d. 是否可以当做参数使用: Comparable接口 不可以
                                            Comparator接口 可以 -- 可以在多个方法中以参数形式出现

 方法:

first,last:获取其中的第一个元素 和最后一个元素, 仅仅是一个查看的操作,不是一个移除的操                     作
pollFirst,pollLast:移除并且获取指定位置的元素, 是一个移除的操作,会影响集合的长度

 floor(参:指定字符):返回的是集合中小于等于给定元素的最大的数据, 如果不存在则返回null

higher(参:指定字符):返回的是集合中大于给定元素的最小的数据,如果不存在则返回null

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值