TreeMap

TreeMap

概述

TreeMap实现了SortedMap接口(是Map的子接口),可以对key自动排序

底层是红黑树

实践

package com.qianfeng.collection;

import java.util.Map;
import java.util.TreeMap;

/**
 * 功能描述
 *
 * @since 2022-05-17
 */
public class TreeMapDemo {
    public static void main(String[] args) {
        TreeMap<Teacher, String> treeMap = new TreeMap();
        Teacher t1 = new Teacher("zhangsan", 20);
        Teacher t2 = new Teacher("lisi", 20);
        Teacher t3 = new Teacher("wangwu", 20);
        treeMap.put(t1, "shanghai");
        treeMap.put(t2, "beijing");
        treeMap.put(t3, "nanjing");
        System.out.println(treeMap);

        treeMap.remove(new Teacher("wangwu", 20));

        for (Teacher key : treeMap.keySet()) {
            System.out.println(key + "============" + treeMap.get(key));
        }

        for (Map.Entry entry :
                treeMap.entrySet()) {
            System.out.println(entry.getKey() + "============" + entry.getValue());
        }

        System.out.println(treeMap.containsKey(new Teacher("lisi", 20)));
        System.out.println(treeMap.isEmpty());
    }
}

class Teacher implements Comparable<Teacher> {
    private String name;
    private int age;

    public Teacher(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Teacher{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    @Override
    public int compareTo(Teacher o) {
        int n1 = age - o.age;
        int n2 = name.compareTo(o.name);

        return n1 == 0 ? n2 : n1;
    }
}

package com.qianfeng.collection;

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

/**
 * 功能描述
 *
 * @since 2022-05-17
 */
public class TreeMapDemo2 {
    public static void main(String[] args) {
        TreeMap<Teacher1, String> treeMap = new TreeMap(new Comparator<Teacher1>() {
            @Override
            public int compare(Teacher1 o1, Teacher1 o2) {
                int n1 = o1.getName().compareTo(o2.getName());
                int n2 = o2.getAge() - o2.getAge();
                return n1 == 0 ? n2 : n1;
            }
        });
        Teacher1 t1 = new Teacher1("zhangsan", 20);
        Teacher1 t2 = new Teacher1("lisi", 20);
        Teacher1 t3 = new Teacher1("wangwu", 20);
        treeMap.put(t1, "shanghai");
        treeMap.put(t2, "beijing");
        treeMap.put(t3, "nanjing");
        System.out.println(treeMap);

        treeMap.remove(new Teacher1("wangwu", 20));

        for (Teacher1 key : treeMap.keySet()) {
            System.out.println(key + "============" + treeMap.get(key));
        }

        for (Map.Entry entry :
                treeMap.entrySet()) {
            System.out.println(entry.getKey() + "============" + entry.getValue());
        }

        System.out.println(treeMap.containsKey(new Teacher1("lisi", 20)));
        System.out.println(treeMap.isEmpty());
    }
}

class Teacher1 {
    private String name;
    private int age;

    public Teacher1(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Teacher{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}
posted @ 2022-05-17 21:49  Oh,mydream!  阅读(13)  评论(0编辑  收藏  举报