TreeSet
特点
- TreeSet和HashSet处于同一级,也实现了Set接口
- TreeSet不同于HashSet的无序和LinkedHashSet的有序,无参构造时默认是key的compareTo进行比较,下面的情况便是按照String.compareTo()排列
@SuppressWarnings({"all"})
public class TreeSet_{
public static void main(String[] args){
TreeSet treeSet = new TreeSet();
treeSet.add("jack");
treeSet.add("tom");
treeSet.add("sp");
treeSet.add("a");
System.out.println(treeSet);
//输出为[a, jack, sp, tom]
}
}
- 有参构造,自定义排列顺序,使用一个匿名内部类作为比较器(!!!当return结果为0时候,只是setValue,不进行添加):
TreeSet ts = new TreeSet(new Comparator(){
//重写Comparator中的compare方法
@Override
public int compare(Object o1, Object o2){
return ((String)o1).compareTo((String)o2);
}
})
- TreeSet底层构造器代码(说明TreeSet底层实际上是TreeMap):
public boolean add(E e){
return m.put(e, PRESENT)==null;
//此处使用PRESENT作为占位符,实际上调用的是TreeMap的put方法
}
public TreeMap(Comparator<? super K> comparator){
this.comparator = comparator;
}
TreeMap
特点
- 实现了Map接口,和HashMap和Hashtable处于同一级
- 无参构造时默认是key的compareTo进行比较
- 和TreeSet相似,也可以有参构造,自定义排列顺序,使用一个匿名内部类作为比较器