1.TreeSet
TreeSet: 可对里边的元素实现自然排序: (从小到大,或者从大到小)
里边的元素不能重复:依赖的是compareTo/compare
认为结果是0的两个元素是一个元素,所以存的时候 就会少一个元素通常我们在写compareTo/compare方法的时候,尽量不要只比较一个属性(这里和set集合不同,Set集合是依赖hashcode和equals两个方法来确定元素不重复)
有序的:
List: 可以使用索引操作元素
LinkedHashSet/LinkedHashMap: 可以保证存入和取出的顺序
TreeSet/TreeMap: 里边的元素可按大小进行排序
要求里面的元素必须实现Comparable接口,默认按照改接口的实现的排序规则进行排序,如果不想实现该接口,或者对这里的排序方式不满意,可以在创建TreeSet对象的时候传进去一个Comparator,实现新的排序方式。
import java.util.Comparator;
import java.util.TreeSet;
public class TreeSetDemo {
public static void main(String[] args) {
TreeSet<Integer> treeSet = new TreeSet<>();
treeSet.add(100);
treeSet.add(10);
treeSet.add(40);
treeSet.add(40);
treeSet.add(50);
System.out.println(treeSet);//升序
//无参构造方法的TreeSet中的元素必须要实现Comparable接口
TreeSet<Person> ps = new TreeSet<>();
ps.add(new Person(“Lucy”,12));//运行时报错:java.lang.ClassCastException: ,由于没有实现Comparable接口
ps.add(new Person(“Jack”,100));
ps.add(new Person(“Rose”,60));
ps.add(new Person(“TOM”,17));
ps.add(new Person(“JOM”,17));
ps.add(new Person(“Jerry”,27));
System.out.println(ps);
//Comparator,传入一个Comparator,TreeSet可按此方式进行排序
TreeSet<Integer> set1 = new TreeSet<>(new Comparator<Integer>(){
@Override
public int compare(Integer o1, Integer o2) {
return o2-o1;
}
});
set1.add(100);
set1.add(10);
set1.add(40);
set1.add(50);
System.out.println(set1);//
}
}
class Person implements Comparable<Person>{
String name;
int age;
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
@Override
public String toString() {
return “Person [name=” + name + “, age=” + age + “]”;
}
@Override
public int compareTo(Person o) {
return this.age – o.age;
}
}
2.TreeMap
import java.util.Comparator;
import java.util.Map;
import java.util.TreeMap;
/**
* TreeMap: 可以对元素中的key做自然排序
*
key不能重复: compareTo/compare
*/
public class TreeMapDemo {
public static void main(String[] args) {
Map<Integer,String> map = new TreeMap<>();
map.put(120, “34”);
map.put(150, “344”);
map.put(110, “3476”);
map.put(90, “347”);
System.out.println(map);
Map<Integer,String> map1 = new TreeMap<Integer, String>(new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o2-o1;
}
});
map1.put(120, “34”);
map1.put(150, “344”);
map1.put(110, “3476”);
map1.put(90, “347”);
System.out.println(map1);
TreeMap<Person,Integer> map3 = new TreeMap<>();
map3.put(new Person(“Lucy”,12), 1);
map3.put(new Person(“Lily”,5), 2);
map3.put(new Person(“Poly”,9), 3);
System.out.println(map3);
}
}