集合(23):Map接口的子类----TreeMap类

集合(23):Map接口的子类----TreeMap类

1、TreeMap类概述

键是红黑树结构,可以保证键的排序和唯一性

2、TreeMap案例

(1)HashMap<String,String>
(2)HashMap<Student,String>
(1)HashMap<String,String>
import java.util.Objects;

public class Student4 {
    private String name;
    private int age;

    public Student4() {
    }

    public Student4(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 "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Student4 student4 = (Student4) o;
        return age == student4.age &&
                Objects.equals(name, student4.name);
    }

    @Override
    public int hashCode() {

        return Objects.hash(name, age);
    }
}
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;

/*
    TreeMap:底层数据结构是红黑树
    HashMap<String,String>

 */
public class TreeMapDemo1 {
    public static void main(String[] args) {
        //创建集合对象
        TreeMap<String, String> map = new TreeMap<>();

        //添加元素到集合中
        map.put("hello", "你好");
        map.put("java", "面向对象编程的语言");
        map.put("hadoop", "适合海量数据存储的分布式计算和分布式存储的平台");
        map.put("hive", "是数据仓库建模工具之一");
        map.put("java", "面向对象编程的语言2");

        //遍历
        Set<Map.Entry<String, String>> entries = map.entrySet();
        for (Map.Entry<String, String> kv : entries) {
            String key = kv.getKey();
            String value = kv.getValue();

            System.out.println(key + "--" + value);
        }
    }
}
            执行结果如下:
                        hadoop--适合海量数据存储的分布式计算和分布式存储的平台
                        hello--你好
                        hive--是数据仓库建模工具之一
                        java--面向对象编程的语言2

                        Process finished with exit code 0

(2)HashMap<Student,String>
import java.util.Objects;

public class Student4 {
    private String name;
    private int age;

    public Student4() {
    }

    public Student4(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 "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Student4 student4 = (Student4) o;
        return age == student4.age &&
                Objects.equals(name, student4.name);
    }

    @Override
    public int hashCode() {

        return Objects.hash(name, age);
    }
}
import java.util.Comparator;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;

/*
        TreeMap<Student,String>
        键:Student
        值:String
 */
public class TreeMapDemo2 {
    public static void main(String[] args) {
        //创建TreeMap对象
    TreeMap<Student4, String> map = new TreeMap<>(new Comparator<Student4>() {
            @Override
            public int compare(Student4 o1, Student4 o2) {
                //年龄
                int i = o1.getAge()-o2.getAge();
                //姓名
                int i2 = i == 0 ? o1.getName().compareTo(o2.getName()) : i;

                return i2;

            }
        });

        //创建学生对象
        Student4 s1 = new Student4("唐伯虎", 18);
        Student4 s2 = new Student4("祝枝山", 19);
        Student4 s3 = new Student4("朱佳乐", 20);
        Student4 s4 = new Student4("杨旭", 17);
        Student4 s5 = new Student4("唐伯虎", 18);

        //添加元素到集合中
        map.put(s1, "唐伯虎点秋香");
        map.put(s2, "小鸡吃米图");
        map.put(s3, "水淹电脑");
        map.put(s4, "申报才子");
        map.put(s5, "唐伯虎点秋香");

        //遍历
        Set<Map.Entry<Student4, String>> entries = map.entrySet();
        for (Map.Entry<Student4, String> entry : entries) {
            Student4 key = entry.getKey();

            String value = entry.getValue();
            System.out.println(key + "---" + value);

        }
    }
}
            执行结果如下:
                        Student{name='杨旭', age=17}---申报才子
                        Student{name='唐伯虎', age=18}---唐伯虎点秋香
                        Student{name='祝枝山', age=19}---小鸡吃米图
                        Student{name='朱佳乐', age=20}---水淹电脑

                        Process finished with exit code 0
posted @ 2022-01-01 20:44  阿伟宝座  阅读(96)  评论(0)    收藏  举报