TreeMap集合

简介: TreeMap集合



总结于尚硅谷学习视频

TreeMapTest类

package com.day0308_1;
import org.junit.jupiter.api.Test;
import java.util.*;
public class TreeMapTest {
    //向TreeMap中添加key-value,要求key必须是由同一个类创建的对象
    //因为要按照key进行排序:自然排序、定制排序
    //自然排序
    @Test
    public void test1() {
        TreeMap map = new TreeMap();
        User u1 = new User("Tom", 23);
        User u2 = new User("Jerry", 32);
        User u3 = new User("Jack", 20);
        User u4 = new User("Rose", 18);
        map.put(u1, 98);
        map.put(u2, 89);
        map.put(u3, 76);
        map.put(u4, 100);
        Set entrySet = map.entrySet();
        Iterator iterator1 = entrySet.iterator();
        while (iterator1.hasNext()) {
            Object obj = iterator1.next();
            Map.Entry entry = (Map.Entry) obj;
            System.out.println(entry.getKey() + "---->" + entry.getValue());
        }
    }
    //定制排序
    @Test
    public void test2() {
        TreeMap map=new TreeMap(new Comparator() {
            @Override
            public int compare(Object o1, Object o2) {
                if(o1 instanceof User&&o2 instanceof User){
                    User u1= (User) o1;
                    User u2= (User) o2;
                    return Integer.compare(u1.getAge(),u2.getAge());
                }
                throw new RuntimeException("输入的年龄不匹配");
            }
        });
        User u1 = new User("Tom", 23);
        User u2 = new User("Jerry", 32);
        User u3 = new User("Jack", 20);
        User u4 = new User("Rose", 18);
        map.put(u1, 98);
        map.put(u2, 89);
        map.put(u3, 76);
        map.put(u4, 100);
        Set entrySet = map.entrySet();
        Iterator iterator1 = entrySet.iterator();
        while (iterator1.hasNext()) {
            Object obj = iterator1.next();
            Map.Entry entry = (Map.Entry) obj;
            System.out.println(entry.getKey() + "---->" + entry.getValue());
        }
    }
}

User类

package com.day0308_1;
import java.util.Objects;
public class User implements Comparable{
    private String name;
    private int age;
    public User() {
    }
    public User(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 "User{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
    @Override
    public boolean equals(Object o) {
        System.out.println("User equals...");
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        User user = (User) o;
        return age == user.age &&
                Objects.equals(name, user.name);
    }
    @Override
    public int hashCode() {
        return Objects.hash(name, age);
    }
    //按姓名从大到小,年龄从小到大排列
    @Override
    public int compareTo(Object o) {
        if(o instanceof User){
            User user=(User)o;
//            return -this.name.compareTo(user.name);
            int compare=-this.name.compareTo(user.name);
            if(compare!=0){
                return compare;
            }else {
                return Integer.compare(this.age,user.age);
            }
        }else{
            throw new RuntimeException("输入的类型不匹配");
        }
    }
}
相关文章
|
5月前
Collection和Map的遍历方式
Collection和Map的遍历方式
29 0
|
12月前
|
存储 编译器 程序员
用同一棵红黑树实现map和set【STL】
用同一棵红黑树实现map和set【STL】
44 0
|
2月前
Collection的遍历
Collection的遍历
31 2
|
2月前
|
存储
使用 entrySet 遍历 Map 类集合 KV
使用 entrySet 遍历 Map 类集合 KV
|
5月前
|
安全 编译器 测试技术
C++【一棵红黑树封装 set 和 map】
C++【一棵红黑树封装 set 和 map】
53 0
|
Java 索引
Collection 集合的遍历
Collection 集合的遍历
58 0
|
存储 算法 编译器
【C++】用一棵红黑树同时封装出map和set
【C++】用一棵红黑树同时封装出map和set
|
C++
【C++】set和map的底层AVL树的实现(下)
【C++】set和map的底层AVL树的实现(下)
60 0
|
C++ 容器
【C++】set和map的底层AVL树的实现(上)
【C++】set和map的底层AVL树的实现(上)
72 0