TreeMap和TreeSet对象排序

2018-08-15  本文已影响38人  阿健在长安
package Tips;

/**
 * 保证TreeMap的键有序有两种方法:
 * 自然排序:该键的类实现Comparable即重写compareTo方法,创建TreeMap不用特殊处理
 * 定制排序:实现Comparator接口即重写compare方法,创建TreeMap时传入该实现类
 */

import java.util.Comparator;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
import java.util.TreeSet;

class Person implements Comparable<Person> {
    public String name;
    public 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 person) {
        return this.name.compareTo(person.name);
    }
}

class AscAgeComparator2 implements Comparator<Person> {
    public int compare(Person p1, Person p2) {
        return p1.age - p2.age;
    }
}

public class TreeMapSort {

    public static void main(String[] args) {
        Person p1 = new Person("Zera", 23);
        Person p2 = new Person("Jerry", 19);
        Person p3 = new Person("Tonny", 30);

        System.out.println("TreeMap自然排序:");
        Map<Person, Integer> map1 = new TreeMap<>();
        map1.put(p1, 5);
        map1.put(p2, 6);
        map1.put(p3, 7);
        System.out.println(map1);

        System.out.println("TreeMap定制排序:");
        Map<Person, Integer> map2 = new TreeMap<>(new AscAgeComparator2());
        map2.put(p1, 5);
        map2.put(p2, 6);
        map2.put(p3, 7);
        System.out.println(map2);

        System.out.println("TreeSet自然排序:");
        Set<Person> set1 = new TreeSet<>();
        set1.add(p1);
        set1.add(p2);
        set1.add(p3);
        System.out.println(set1);

        System.out.println("TreeSet定制排序:");
        Set<Person> set2 = new TreeSet<>(new AscAgeComparator2());
        set2.add(p1);
        set2.add(p2);
        set2.add(p3);
        System.out.println(set2);
    }

}
上一篇下一篇

猜你喜欢

热点阅读