集合体系之TreeSet
|---Collection
|---List
特点: 有序,有角标,元素可重复
|---ArrayList
|---LinkedList
|---Set
特点: 无序,元素不可重复.
|---HashSet
|---LinkedHashSet
|---TreeSet
1.特点:
该集合最显著的特点,可以给元素按照自然顺序排序...
问题:
存储自定义元素时, 如果元素没有定义比较的规则. 该集合是无法存储的.
解决方案一:
元素->实现接口Comparable 重写compareTo.
compareTo方法重写的技巧.
在返回整数值.
public int compareTo(Object o){
this
o;
}
当你,想要this >o 对象时. 该方法就返回正整数.
当你,需要 this<o 对象时,方法返回负整数.
当你,需压迫this ==o 对象时. 方法返回0.
注意:
如果使用集合TreeSet 存储了自定义元素. 而这种元素,却没有实现Comparable接口,也没有重写compareTo 方法. 此时TreeSet就无法正常工作. 运行直接报错了.
1. 可以想解决方案一一样,让元素去实现Comparable接口
如果使用集合存储的元素. 不是自行设计的,使用其他公司,机构,(第三方开发的). 无法直接修改这个源码,直接只能使用而已...
1. 定义子类继承这个类,在子类中实现接口Comparable 接口. ->万一这个类设计为final类.
当遇到各种各样的问题,导致了元素无法实现Comparable 接口时, 不要在元素浪费时间. 可以直接给TreeSet 指定比较器对象. 告诉集合该如何给元素排序.
解决方案二:
TreeSet的构造函数,接收一个Comparator 接口的实现类对象. ->给集合TreeSet 指定比较器.
interface Comparator{
public int compare(Object o1,Object o2){
}
}
总结:
都是为了保证集合TreeSet 可以正常工作的.
接口一:
Comparable ->compareTo
-> 元素,元素实现这个接口,重写方法. 保证元素具备自然的比较性.
构造函数:
TreeSet()
接口二:
Comparator ->compare
-> 集合,集合有了这个比较器,集合就知道如何排序了.
构造函数:
TreeSet(Comparator comparator)
定义类实现该接口,创建给接口的实现类对象,通过TreeSet的构造函数,接收这个对象.
直接使用匿名内部类的形式,直接在TreeSet构造函数中,创建这个接收的实现类对象.
|
|