TreeMap和TreeSet对象排序

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);
    }

}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容