1、二者默认按照升序排序:TreeSet按照存储元素升序排序;TreeMap按照key升序排序。
2、要想自定义TreeSet和TreeMap中元素的排序,可以在其初始化时,指定比较器即可。
3、测试code:
package sourcecode.analysis;
import java.util.*;
public class testCode {
public static void main(String[] args){
/**
* (1)TreeSet里面:没有接口Comparator中的compare方法,只调用了接口Comparator中的equals方法
* (2)继承了抽象类AbstractSet<E>:equals方法被覆写.故TreeSet调用equals方法时,是调用的这个equals方法.
*/
//例一:TreeSet在初始化时,指定比较器,从而指定元素的排列顺序
TreeSet<Integer> set=new TreeSet<Integer>(new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o2-o1;//降序
}
});
set.add(1);set.add(4);set.add(3);
//例二:TreeSet在初始化时,不指定比较器,故元素的排列顺序为默认的升序
TreeSet<Integer> set1=new TreeSet<Integer>();
set1.add(1);set1.add(4);set1.add(3);
//分别输出set,set1
System.out.println("set: ");
Iterator<Integer> iterator1=set.iterator();
while (iterator1.hasNext()){
System.out.print(iterator1.next()+" ");
}
System.out.println();
System.out.println("---------------------");
System.out.println("set1: ");
Iterator<Integer> iterator2=set1.iterator();
while (iterator2.hasNext()){
System.out.print(iterator2.next()+" ");
}
System.out.println();
System.out.println("---------------------");
/**
* (1)TreeMap里面:没有接口Comparator中的compare方法,只调用了接口Comparator中的equals方法
* (2)继承了抽象类AbstractMap<K,V>:equals方法被覆写.故TreeMap调用equals方法时,是调用的这个equals方法.
*/
//例一:TreeMap初始化时,未指定比较器,默认按照key升序
TreeMap<Integer,Integer> map=new TreeMap<Integer, Integer>();
map.put(1,1);map.put(2,3);map.put(-1,3);map.put(4,3);
//例二:TreeMap初始化时,指定了比较器,按照key降序
TreeMap<Integer,Integer> map1=new TreeMap<Integer, Integer>(new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o2-o1;//降序
}
});
map1.put(1,1);map1.put(2,3);map1.put(-1,3);map1.put(4,3);
//输出map,map1
Iterator<Map.Entry<Integer,Integer>> i1=map.entrySet().iterator();
Iterator<Map.Entry<Integer,Integer>> i2=map1.entrySet().iterator();
System.out.println("map:");
while (i1.hasNext()){
Map.Entry<Integer,Integer> entry=i1.next();
System.out.print("key:"+entry.getKey()+", ");
System.out.println("value: "+entry.getValue());
}
System.out.println("---------------------");
System.out.println("map1: ");
while (i2.hasNext()){
Map.Entry<Integer,Integer> entry=i2.next();
System.out.print("key: "+entry.getKey()+", ");
System.out.println("value: "+entry.getValue());
}
System.out.println("---------------------");
}
}
输出结果:
set:
4 3 1
---------------------
set1:
1 3 4
---------------------
map:
key:-1, value: 3
key:1, value: 1
key:2, value: 3
key:4, value: 3
---------------------
map1:
key: 4, value: 3
key: 2, value: 3
key: 1, value: 1
key: -1, value: 3
---------------------
Process finished with exit code 0