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

67 篇文章 16 订阅

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

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

  博文系列:

《Java实现List集合的排序:Comparator接口、Collections.sort()方法、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());
    }
}

执行结果:

  • 12
    点赞
  • 59
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
Java TreeMap可以按照value排序,可以通过实现Comparator接口来实现。具体步骤如下: 1. 创建一个实现Comparator接口的类,重写compare方法,比较两个value的大小。 2. 创建一个TreeMap对象,并将实现了Comparator接口的类作为参数传入。 3. 将需要排序对添加到TreeMap中。 4. 使用entrySet()方法获取TreeMap中的所有对,并将其转换为List。 5. 使用Collections.sort()方法对List进行排序。 6. 遍历排序后的List,输出对。 示例代码如下: ``` import java.util.*; public class TreeMapSortByValue { public static void main(String[] args) { // 创建一个实现Comparator接口的类 ValueComparator vc = new ValueComparator(); // 创建一个TreeMap对象,并将实现了Comparator接口的类作为参数传入 TreeMap<String, Integer> map = new TreeMap<>(vc); // 将需要排序对添加到TreeMap中 map.put("apple", 10); map.put("banana", 5); map.put("orange", 8); // 使用entrySet()方法获取TreeMap中的所有对,并将其转换为List List<Map.Entry<String, Integer>> list = new ArrayList<>(map.entrySet()); // 使用Collections.sort()方法对List进行排序 Collections.sort(list, new Comparator<Map.Entry<String, Integer>>() { @Override public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) { return o1.getValue().compareTo(o2.getValue()); } }); // 遍历排序后的List,输出对 for (Map.Entry<String, Integer> entry : list) { System.out.println(entry.getKey() + " : " + entry.getValue()); } } } // 实现Comparator接口的类 class ValueComparator implements Comparator<String> { Map<String, Integer> map = new HashMap<>(); public ValueComparator() {} public ValueComparator(Map<String, Integer> map) { this.map.putAll(map); } @Override public int compare(String s1, String s2) { if (map.get(s1) >= map.get(s2)) { return 1; } else { return -1; } } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

pan_junbiao

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

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

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

打赏作者

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

抵扣说明:

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

余额充值