7.31笔记
一、Set
List:
有序的,可重复的,可以根据索引使用
Set:
无序的(存储的顺序与内部真实存放的顺序不保证一致),去重的,不可以根据索引使用的
HashSet
TreeSet
Set:
不包含重复元素的集合
无新增方法
遍历方式:
foreach
iterator
二、TreeList:
无序的,去重的
底层结构:红黑树(平衡二叉树)
特点:自动做升序排序
应用场景:适合应用在想要对数据根据指定规则做升序|降序排序的情况下
新增方法:新增了以下比较大小的方法
遍历方式:
foreach
itreator()
descendingIterator()
注意此时先不同步,不安全。
E ceiling(E e)返回此集合中大于或等于给定元素的最小元素,如果没有这样的元素,则null 。 System.*out*.println(set.ceiling(3.1));
E floor(E e)返回此集合中小于或等于给定元素的最大元素,如果没有这样的元素,则null 。 System.*out*.println(set.floor(3.1));
E first()返回此集合中当前的第一个(最低)元素。 System.*out*.println(set.first());
E last()返回此集合中当前的最后一个(最高)元素。 System.*out*.println(set.last());
E pollFirst()检索并删除第一个(最低)元素,如果此集合为空,则返回null 。 System.*out*.println(set.pollFirst()); E pollLast()检索并删除最后一个(最高)元素,如果此集合为空,则返回null 。 System.*out*.println(set);
E higher(E e)返回此集合中严格大于给定元素的最小元素,如果没有这样的元素,则null 。 System.*out*.println(set.higher(3.1)); E lower(E e)返回此集合中严格小于给定元素的最大元素,如果没有这样的元素,则null 。 System.*out*.println(set.lower(3.1));
三、比较规则
使用TreeSet存储自定义的员工数据,测试实现去重排序
要求存储的类型实现比较规则(内部|外部),如果没有实现,遇到类型转换异常ClassCastException
去重与排序:都只根据调用的比较规则决定
如何定义比较规则:
1.内部比较器|自然排序|默认比较规则:
要比较的类型实现Comparable接口,重写compare(To)方法,方法的内部定义比较规则
2.外部比较器|定制排序|自定义比较规则:
实现类实现Comparator<T>接口,重写compare(To1,To 2)方法,方法的内部定义比较规则
定义员工类的比较规则 : 一般员工都是根据员工编号做升序排序
x.compareTo(y)
返回值 : 根据返回值决定比较的两个对象的大小
=0 x=y
<0 x<y
0 x>y
四、HashSet
无序的,去重的,不能根据索引使用的
底层是由HashMap维护的
底层结构:哈希表(jdk1.7及之前:数组+链表 jdk1.8及之后:数组+链表+红黑树)
特点:查询增删效率都高
应用场景:适合应用在大量做查询增删的需求下
去重:一般结合业务都想要根据对象的内容做去重
在对象类型中根据内容重写HashCode与equals方法
注意:前提在根据内容重写HashCode与equals方法之后:
HashCode相等,equals不一定相等
equals相等,HashCode一定相等