热门搜索 :
考研考公
您的当前位置:首页正文

Java TreeMap 与 TreeSet

来源:东饰资讯网

TreeMap

  • TreeMap 实现了 SortedMap 接口(基于红黑树的实现),它能保证 Map 中的元素是有序的
  • 可以使用 Comparator 或 Comparable 进行元素的比较

用法

  • 自然排序
TreeMap<Integer,String> treeMap = new TreeMap<>();
treeMap.put(5,"b");
treeMap.put(1,"a");
treeMap.put(6,"c");
treeMap.forEach((k,v)->{
    System.out.println(k+" "+v);
});

TreeSet

  • TreeSet 底层是基于 TreeMap 实现的,非线程安全,但它是一个有序集

TreeSet 用法

  • 自然排序:
TreeSet<Integer> treeSet = new TreeSet<>();
treeSet.add(1);
treeSet.add(6);
treeSet.add(3);
treeSet.add(2);
treeSet.add(7);
treeSet.forEach(z->System.out.println(z));
  • 对象实现 Comparable 排序:
public class Person implements Comparable<Person> {
    private String name;
    private Integer age;

    // .... 构造方法与 set、get 方法
    
    @Override
    public int compareTo(Person o) {
        if (this.age < o.getAge())
            return 1;
        return -1;
    }
}
TreeSet<Person> treeSet = new TreeSet<>();
treeSet.add(new Person("b",1));
treeSet.add(new Person("a",5));
treeSet.add(new Person("b",3));
treeSet.forEach(person -> System.out.println(person));
  • TreeSet 构造函数传入 Comparator
TreeSet<Person> treeSet = new TreeSet<>((o1,o2)->{
if (o1.getAge()>o2.getAge())
    return 1;
if (o1.getAge()==o2.getAge())
    return 0;
return -1;
});
treeSet.add(new Person("b",1));
treeSet.add(new Person("a",5));
treeSet.add(new Person("c",2));
treeSet.forEach(person -> System.out.println(person));
Top