Java实现TreeMap集合的排序:Key键的升序与降序、Value值的排序

 Java中的数组与集合类的使用,系列文章:

《Java数组》

《Java集合类》

《Java中String、Array、List的相互转换工具类》

《Java8使用Stream流实现List列表的查询、统计、排序、分组》

《Java实现List集合的排序:Comparable接口、Comparator接口、stream().sorted()方法的使用》

《Java实现TreeMap集合的排序:Key键的升序与降序、Value值的排序》

《Java中迭代器(Iterator)的使用》

Java 提供的 Map 接口常用的实现类有 HashMap 和 TreeMap。HashMap 类实现的 Map 集合对于添加和删除映射关系效率更高。HashMap 通过哈希码对其内部的映射关系进行快速查找;而 TreeMap 中的映射关系存在一定的顺序,如果希望 Map 集合中的对象也存在一定的顺序,应该使用 TreeMap 类实现 Map 集合。

下面将通过实例来实现 Map 接口中的 TreeMap 集合按照 Key 键的升序与降序,按照 Value 值的排序。

  博文系列:

《Java实现List集合的排序:Comparable接口、Comparator接口、stream().sorted()方法的使用》

《Java实现TreeMap集合的排序:Key键的升序与降序、Value值的排序》

(1)创建用户信息实体类

/**
 * 用户信息实体类
 * @author pan_junbiao
 **/
public class UserInfo
{
    private int userId; //用户编号
    private String userName; //用户名称
    private int age; //年龄
    private String blogInfo; //博客信息

    //构造函数
    public UserInfo(int userId, String userName, int age, String blogInfo)
    {
        this.userId = userId;
        this.userName = userName;
        this.age = age;
        this.blogInfo = blogInfo;
    }

    public int getUserId()
    {
        return userId;
    }

    public void setUserId(int userId)
    {
        this.userId = userId;
    }

    public String getUserName()
    {
        return userName;
    }

    public void setUserName(String userName)
    {
        this.userName = userName;
    }

    public int getAge()
    {
        return age;
    }

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

    public String getBlogInfo()
    {
        return blogInfo;
    }

    public void setBlogInfo(String blogInfo)
    {
        this.blogInfo = blogInfo;
    }

    @Override
    public String toString()
    {
        return "用户编号:" + this.userId + " 用户名称:" + this.userName
                +  " 年龄:" + this.age + " 博客信息:" + this.blogInfo;
    }
}

(2)编写获取用户信息列表方法

/**
 * 获取用户信息列表
 * @author pan_junbiao
 */
private Map<Integer,UserInfo> getUserMap()
{
    Map<Integer,UserInfo> userMap = new HashMap<>();

    //创建用户信息
    UserInfo user1 = new UserInfo(1,"pan_junbiao的博客", 25, "您好,欢迎访问 pan_junbiao的博客");
    UserInfo user2 = new UserInfo(2,"pan_junbiao的博客", 18, "https://blog.csdn.net/pan_junbiao");
    UserInfo user3 = new UserInfo(3,"pan_junbiao的博客", 35, "您好,欢迎访问 pan_junbiao的博客");
    UserInfo user4 = new UserInfo(4,"pan_junbiao的博客", 32, "https://blog.csdn.net/pan_junbiao");

    //将用户信息加入Map(故意打乱顺序)
    userMap.put(user4.getUserId(),user4);
    userMap.put(user2.getUserId(),user2);
    userMap.put(user3.getUserId(),user3);
    userMap.put(user1.getUserId(),user1);

    return userMap;
}

1、TreeMap集合实现Key键的升序

/**
 * TreeMap集合,实现Key升序
 * @author pan_junbiao
 */
@Test
public void testTreeMapAsc()
{
    //创建 TreeMap 集合
    TreeMap<Integer,UserInfo> userTreeMap = new TreeMap<>();

    //获取用户信息列表
    userTreeMap.putAll(getUserMap());

    //遍历用户信息列表
    System.out.println("TreeMap集合,实现Key升序:");
    for(Iterator<Integer> it = userTreeMap.keySet().iterator(); it.hasNext();)
    {
        int key = it.next();
        UserInfo value = userTreeMap.get(key);

        System.out.println("Key键:" + key);
        System.out.println("Value值:" + value);
    }
}

执行结果:

2、 TreeMap集合实现Key键的降序

/**
 * TreeMap集合,实现Key降序
 * @author pan_junbiao
 */
@Test
public void testTreeMapDesc()
{
    //创建 TreeMap 集合,设置Key降序方法一:
    //TreeMap<Integer,UserInfo> userTreeMap = new TreeMap<>(Collections.reverseOrder());

    //创建 TreeMap 集合,设置Key降序方法二:
    TreeMap<Integer,UserInfo> userTreeMap = new TreeMap<Integer,UserInfo>(new Comparator<Integer>()
    {
        public int compare(Integer key1,Integer key2)
        {
            //降序排序
            return key2.compareTo(key1);
        }
    });

    //获取用户信息列表
    userTreeMap.putAll(getUserMap());

    //遍历用户信息列表
    System.out.println("TreeMap集合,实现Key降序:");
    for(Iterator<Integer> it = userTreeMap.keySet().iterator(); it.hasNext();)
    {
        int key = it.next();
        UserInfo value = userTreeMap.get(key);

        System.out.println("Key键:" + key);
        System.out.println("Value值:" + value);
    }
}

执行结果:

3、TreeMap集合实现Value值的排序

【示例】按照用户年龄降序排序。

/**
 * TreeMap集合,实现Value排序
 * 按照用户年龄降序
 * @author pan_junbiao
 */
@Test
public void testTreeMapValue()
{
    //创建 TreeMap 集合
    TreeMap<Integer,UserInfo> userTreeMap = new TreeMap<>();

    //获取用户信息列表
    userTreeMap.putAll(getUserMap());

    //将Map转换成List
    List<Map.Entry<Integer,UserInfo>> list = new ArrayList<Map.Entry<Integer,UserInfo>>(userTreeMap.entrySet());

    // 通过比较器来实现排序
    Collections.sort(list, new Comparator<Map.Entry<Integer,UserInfo>>()
    {
        @Override
        public int compare(Map.Entry<Integer,UserInfo> user1, Map.Entry<Integer,UserInfo> user2)
        {
            Integer age1 = user1.getValue().getAge();
            Integer age2 = user2.getValue().getAge();

            //按照用户年龄降序
            return age2.compareTo(age1);
        }
    });

    //遍历用户信息列表
    System.out.println("TreeMap集合,实现Value排序,按照用户年龄降序:");
    for (Map.Entry<Integer,UserInfo> mapping : list)
    {
        System.out.println("Key键:" + mapping.getKey());
        System.out.println("Value值:" + mapping.getValue());
    }
}

执行结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

pan_junbiao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值