集合框架

集合框架整理

TreeMap和TreeSet的底层由于使用的是二叉树,所以不能保证是存取有序的,但是他们却有着自然顺序,而且这种自然顺序是可以进行自定义的,通过实现比较器接口即可达到目的,如根据我们指定的一个属性值进行排序

案例如下

实体类

class User {
    String name;
    int age;

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

测试方法

@org.junit.Test
    public void test1() {
       User user1 = new User("小o",45);
       User user2 = new User("小a",456);
       User user3 = new User("小b",5);
       User user4 = new User("小c",48);
       User user5 = new User("小d",8695);
       User user6 = new User("小e",475);
       User user7 = new User("小f",546);
       User user8 = new User("小g",405);

        TreeMap<User,String> treeMap = new TreeMap(new Comparator<User>() {
            @Override
            public int compare(User user1, User user2) {
                if (user1.age > user2.age) {
                    return 1;
                } else if (user1.age == user2.age) {
                    return 0;
                } else   {
                    return -1;
                }
            }
        });
        treeMap.put(user1,"1");
        treeMap.put(user2,"2");
        treeMap.put(user3,"3");
        treeMap.put(user4,"4");
        treeMap.put(user5,"5");
        treeMap.put(user6,"6");
        treeMap.put(user7,"7");
        Set<User> users = treeMap.keySet();
        for (User user : users) {
            System.out.println(user.age);
        }
    }

输出结果

5
45
48
456
475
546
8695

在比较器中的compare中,第二个参数是当前要插入的结点点,第一个参数是当前树要插入结点的上一个结点,返回负数则表示当前结点放在树的左子树中,返回0或负数则表示相等放在右子树中(黑体部分是回忆的,以后如果有空再考证,如果有大佬知道留言,感谢)

根据上方案例,也可对TreeSet进行排序

原文地址:https://www.cnblogs.com/kitor/p/10497359.html