TreeSet不能添加null元素
TreeMap不能添加key=null的元素
两者不能保证添加元素的顺序等于输出元素的顺序,是根据比较器来实现排序的
例子:
@SuppressWarnings({"all"})
public class TreeMapTest {
private String name;
private Integer age;
public TreeMapTest(String name, Integer age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "\nTreeMapTest{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
public static void main(String[] args) {
TreeSet<TreeMapTest> treeSet = new TreeSet<>(new Comparator<TreeMapTest>() {
@Override
public int compare(TreeMapTest o1, TreeMapTest o2) {
return sort(o1,o2);
}
});
treeSet.add(new TreeMapTest("小明", 12));
treeSet.add(new TreeMapTest("小卢",12));
treeSet.add(new TreeMapTest("小明",13));
treeSet.add(new TreeMapTest("小明白",12));
treeSet.add(new TreeMapTest("小卢子",1));
System.out.println(treeSet);
TreeMap<TreeMapTest,Object> treeMap = new TreeMap<TreeMapTest, Object>((o1,o2)-> sort(o1,o2) );
treeMap.put(new TreeMapTest("小明", 12),new Object());
treeMap.put(new TreeMapTest("小卢",12),new Object());
treeMap.put(new TreeMapTest("小明",13),new Object());
treeMap.put(new TreeMapTest("小明白",12),new Object());
treeMap.put(new TreeMapTest("小卢子",1),new Object());
System.out.println(treeMap);
}
/**
* 先按name从大到小排序
* 如果相同则按age从大到小排序
* @param test1
* @param test2
* @return
*/
public static int sort(TreeMapTest test1,TreeMapTest test2){
Assert.notNull(test1.getAge());
Assert.notNull(test1.getName());
Assert.notNull(test2.getAge());
Assert.notNull(test2.getName());
//相等为0,前者比后者大返回1,后者比前者大返回相差值
int result = test2.name.compareTo(test1.name);
// 小明白 > 小明 > 小卢子 > 小卢
System.out.println(test1.name + ":" + test2.name + "===>" + result);
if (result == 0){
//相等为0,前者比后者大返回1,后者比前者大返回相差值
return test2.age.compareTo(test1.age);
}else if (result < 0){
return -1;
}
return 1;
}
}