1、集合框架Set
1.元素是无序(存入和取出的顺序不一定一致),元素不可以重复;
它自己有默认的排序规则,根据版本的不一样,导致输出的结果也不一样,
jdk1.8会有稍微的判断,排序了。结论是正确的,也是片面的。。。
2.查看Api会发现,set集合的功能与Collection集合的功能是一致的(就方法调用而言);
HashSet哈希表存储
hashset本身具备去重的功能;
底层数据结构是哈希表,HashSet存入重复元素,同姓名同年龄视为同一个人 ,重复元素,是因为HashSet集合存储是先调用hashCode方法。
注意:对于判断元素是否存在,以及删除等操作,依赖的方法同样是hashCode、equals方法。
2、集合框架TreeSet
1、TreeSet自然排序
<TreeSet又称为红黑树>
TreeSet可以对set集合中元素进行排序
String实现了Comparable接口,所以可以直接进行排序
引用数据类型想要排序,必须实现Comparable接口
其他引用数据类型没有实现Comparable接口,那么会出现
java.lang.ClassCastException: com.javaxl.Peroon cannot be cast to
java.lang.Comparable,实现引用数据类型实现此接口就没问题了。
注意:排序时,当主要条件相同时,一定要判断次要条件
2、TreeSet数据结构(二叉树)
1.可以对set集合进行排序,底层数据结构是二叉树;
2.保证元素唯一性的依据是,compareTo方法return 0
那么开发人员想要对应的引用数据类型按照自己的排序方式进行排列,那么就需要实现comparator接口,实现compare方法
class Person implements Comparable{
private String name;
private int age;
}
-Comparable接口的用途?
使添加的元素自身具备排序规则,这种排序规则又被称为自然排序:
当给对象赋予自然排序规则的时候必须按照一下规则来,先判断主要条件,再判断次要条件 (先按年龄,再按姓氏)
比价器接口:comparator接口:
作用:使得容器具有比较性。
当给对象赋予自然排序规则的时候必须按照一下规则来,先判断主要条件,再判断次要条件 (规则:先按姓氏,再按年龄,),如果不按照规则来,那么会数据丢失。
注意:TreeSet排序的第一种方式,让元素自身具有比较性;
元素需要实现Comparable接口,覆盖compareTo方法;
这种方式也被称为元素的自然顺序,或者叫做默认顺序。
compareTo方法返回值为正数,返回值写死,那么就是怎么存进去怎么取出来。
compareTo方法返回值为负数数,返回值写死,那么就是先进后出。
当两种排序都存在时,比较器排序优先级更高
因此比较器用的多一些,在实际开发中,很多时候,引用数据类型是否
具有比较性,或者比较规则,可能不由开发人员自己决定,
用两个案例说明
1、打破原有的person排序规则进行排序
2、按照字符串长度进行排序(String默认是按照hashCode值进行排序的)