关于TreeSet和TreeMap排序问题
1.默认的自然排序
- 对于字符的排序是a-z,大写字母优于小写字母
- 对于数字默认是从小到大
如果TreeSet中既放入字符,又放入数字,会报错,即无法进行比较排序的错误
java.lang.ClassCastException:
java.lang.String cannot be cast to java.lang.Integer
1.TreeSet实例:
a.字母
Set treeSet = new TreeSet();
treeSet.add("sd");
treeSet.add("rt");
treeSet.add("vc");
System.out.println(treeSet);
>>>[rt, sd, vc]
大小写
Set treeSet = new TreeSet();
treeSet.add("b");
treeSet.add("a");
treeSet.add("A");
treeSet.add("c");
System.out.println(treeSet);
>>>[A, a, b, c]
b.数字
Set treeSet = new TreeSet();
treeSet.add(3);
treeSet.add(5);
treeSet.add(4);
treeSet.add(2);
System.out.println(treeSet);
>>>[2, 3, 4, 5]
2.TreeMap实例:
默认是使用key值进行排序
a.字符
Map map = new TreeMap();
map.put("v",55);
map.put("b",50);
map.put("c",51);
map.put("a",54);
System.out.println(map);
>>>{a=54, b=50, c=51, v=55}
大小写
Map map = new TreeMap();
map.put("c",55);
map.put("a",50);
map.put("A",51);
map.put("b",54);
System.out.println(map);
>>>{A=51, a=50, b=54, c=55}
b.数字
Map map = new TreeMap();
map.put(30,55);
map.put(20,50);
map.put(40,51);
map.put(15,54);
System.out.println(map);
>>>{15=54, 20=50, 30=55, 40=51}
2.使用比较器
使用比较器有两种方式:
- 在创建TreeSet或者TreeMap时直接使用匿名对象Comparator(),重写compare方法
//TreeSet
Set treeSet = new TreeSet(new Comparator() {
@Override
public int compare(Object o1, Object o2) {
return 0;
}
});
//TreeMap
Map map = new TreeMap(new Comparator() {
@Override
public int compare(Object o1, Object o2) {
return 0;
}
});
- 在要放入 TreeSet或者TreeMap的具体对象的类实现接口Comparable,并重写compareTo方法
class Cust implements Comparable{
@Override
public int compareTo(Object o) {
return 0;
}
}
具体实例:
TreeSet
//实现对象按年龄倒序排列
Set treeSet = new TreeSet(new Comparator() {
@Override
public int compare(Object o1, Object o2) {
Cust cust1 = (Cust)(o1);
Cust cust2 = (Cust)(o2);
return cust2.getAge()-cust1.getAge();
}
});
treeSet.add(new Cust("asd",5));
treeSet.add(new Cust("asd",4));
treeSet.add(new Cust("asd",3));
treeSet.add(new Cust("asd",7));
System.out.println(treeSet);
>>>[Cust{name='asd', age=7}, Cust{name='asd', age=5}, Cust{name='asd', age=4}, Cust{name='asd', age=3}]
TreeMap
//实现对象按年龄倒序排列
Map map = new TreeMap(new Comparator() {
@Override
public int compare(Object o1, Object o2) {
Cust cust1 = (Cust)(o1);
Cust cust2 = (Cust)(o2);
return cust2.getAge()-cust1.getAge();
}
});
map.put(new Cust("asd",5),4);
map.put(new Cust("asd",8),2);
map.put(new Cust("asd",4),1);
System.out.println(map);
>>>{Cust{name='asd', age=8}=2, Cust{name='asd', age=5}=4, Cust{name='asd', age=4}=1}
本文介绍了Java中TreeSet和TreeMap的排序问题,包括默认的自然排序和如何使用比较器进行自定义排序。在默认情况下,TreeSet和TreeMap会根据元素的自然顺序进行排序,当元素类型不一致时会导致排序错误。同时,文章通过实例展示了如何通过Comparator或Comparable接口来实现自定义排序,如按年龄倒序排列。

745

被折叠的 条评论
为什么被折叠?



