1.TreeSet类
TreeSet使用红黑树的数据结构来存储集合元素
TreeSet会自动排序,如果存放的对象不能排序则会报错,所以存放的对象必须指定排序规则。排序规则包括自然排序和客户排序。如果希望TreeSet能正常运转,只能添加同一种类型对象。
当把一个对象加入TreeSet集合时,TreeSet调用该对象的compareTo(Object obj)方法与容器中的其他对象比较大小,然后根据红黑树结构找到它的存储位置,如果这两个对象通过compareTo(Object obj)方法比较相等,新对象将无法添加到TreeSet集合中。
①自然排序:TreeSet要添加哪个对象就在哪个对象类上面实现java.lang.Comparable接口,并且重写compareTo(Object obj)方法,返回0则表示是同一个对象,否则为不同对象。
对于TreeSet集合,他判定两个对象是否相等的唯一标准: 两个对象通过compareTo(Object obj)的方法比较是否返回0,如果返回0,TreeSet认为他们相等,否则认为他们不想等。
代码
package com.cn;
import java.util.TreeSet;
class R implements Comparable{
int count;
public R(int count){
this.count = count;
}
public String toString(){
return "R[count:" + count +"]";
}
@Override
public int compareTo(Object o) {
// TODO Auto-generated method stub
R r = (R)o;
if(r.count == this.count){
return 0;
}else if(r.count > this.count){
return -1;
}else{
return 1;
}
}
}
public class TreeSET {
public static void main(String[] args) {
TreeSet ts = new TreeSet();
ts.add(new R(5));
ts.add(new R(10));
ts.add(new R(100));
System.out.println(ts);
}
}
②定制排序:建立一个第三方类并实现java.util.Comparator接口。并重写方法。定义集合形式为TreeSet ts = new TreeSet(new 第三方类());
2 .EnumSet
4.比较
HashSet的元素存放顺序和添加进去时候的顺序没有任何关系;而LinkedHashSet 则保持元素的添加顺序;TreeSet则是对我们的Set中的元素进行排序存放。
一般来说,当要从集合中以有序的方式抽取元素时,TreeSet 实现就会有用处。为了能顺利进行,添加到 TreeSet 的元素必须是可排序的。 而同样需要对添加到TreeSet中的类对象实现 Comparable 接口的支持。对于Comparable接口的实现。假定一棵树知道如何保持 java.lang 包装程序器类元素的有序状态。一般说来,先把元素添加到 HashSet,再把集合转换为 TreeSet 来进行有序遍历会更快。这点和HashMap的使用非常的类似。