package unit5;
import java.util.TreeMap;
import java.util.TreeSet;
public class Java45 {
public static void main(String[] args) {
// 集合排序
// TreeSet集合:不重复、排序
// 报错:unit5.P cannot be cast to java.lang.Comparable
TreeSet<P> treeSet = new TreeSet<>();
treeSet.add(new P("bca", 40));
treeSet.add(new P("abc", 30));
treeSet.add(new P("ccc", 50));
treeSet.forEach(System.out::println);
// TreeSet源码:TreeSet底层就是通过TreeMap实现的
// public TreeSet() {
// this(new TreeMap<E,Object>());
// }
// public boolean add(E e) {
// return m.put(e, PRESENT)==null;
// }
// TreeMap集合:key-value存储、key排序
// TreeMap<String, String> treeMap = new TreeMap<>();
// treeMap.put("bba","张A");
// treeMap.put("abc","张B");
// treeMap.put("ccc","张C");
// treeMap.put("bca","张D");
// treeMap.forEach((k,v)->{
// System.out.println(k + v);
// });
// 排序本质:TreeSet -> TreeMap -> Comparable
// Comparable<? super K> k = (Comparable<? super K>) key;
// TreeMap.Entry<K,V> p = root;
// while (p != null) {
// int cmp = k.compareTo(p.key);
// System.out.println("a".compareTo("b"));
// System.out.println("b".compareTo("a"));
// System.out.println("a".compareTo("a"));
}
}
// 自定义类需要实现Comparable接口、规定了排序的规则
class P implements Comparable {
// 实现排序规则的方法
// 正数、负数、0
@Override
public int compareTo(Object o) {
P p = (P)o;
return this.name.compareTo(p.name);
}
String name;
int age;
public P(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "P{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}