Treemap是一种根据键排序的数据结构,可以通过重载它的比较器来按照值排序。要按键排序,可以使用默认的比较器,而要按值排序,可以创建一个自定义的比较器并将其传递给treemap的构造函数。

以下是按键和值分别排序的示例代码:

按键排序:

import java.util.*;

public class TreeMapExample {
public static void main(String[] args) {
TreeMap<Integer, String> map = new TreeMap<Integer, String>(); // Add elements to the map
map.put(10, "John");
map.put(20, "Steve");
map.put(5, "Mary");
map.put(30, "Martin");
map.put(8, "David"); // Sort by key
TreeMap<Integer, String> sortedByKey = new TreeMap<Integer, String>(map);
System.out.println("Sorted Map by Key: " + sortedByKey); }
}

输出结果:

Sorted Map by Key: {5=Mary, 8=David, 10=John, 20=Steve, 30=Martin}

Treemap是一种基于红黑树实现的有序映射,因此它默认按照键的自然顺序进行排序。如果你需要按照键的降序排序,可以使用Java中的Comparator接口来实现。

以下是一个示例代码,演示了如何创建一个按照键的降序排列的TreeMap:

import java.util.Comparator;
import java.util.TreeMap; public class Main {
public static void main(String[] args) {
// 创建一个按键降序排列的TreeMap
TreeMap<String, Integer> map = new TreeMap<>(Comparator.reverseOrder()); // 添加键值对
map.put("c", 3);
map.put("a", 1);
map.put("d", 4);
map.put("b", 2); // 输出结果
System.out.println(map); // {d=4, c=3, b=2, a=1}
}
}

在这个例子中,我们使用了Comparator.reverseOrder()方法创建了一个比较器,它会将键按照自然顺序的逆序进行排序。然后我们将这个比较器传递给了TreeMap的构造函数中,这样就创建了一个按照键的降序排列的TreeMap。

当然,你也可以根据具体的需求,自定义比较器实现不同的排序方式。

按值排序:

import java.util.*;

public class TreeMapExample {
public static void main(String[] args) {
TreeMap<Integer, String> map = new TreeMap<Integer, String>(); // Add elements to the map
map.put(10, "John");
map.put(20, "Steve");
map.put(5, "Mary");
map.put(30, "Martin");
map.put(8, "David"); // Sort by value
ValueComparator vc = new ValueComparator(map);
TreeMap<Integer, String> sortedByValue = new TreeMap<Integer, String>(vc);
sortedByValue.putAll(map);
System.out.println("Sorted Map by Value: " + sortedByValue);
}
} class ValueComparator implements Comparator<Integer> {
Map<Integer, String> map; public ValueComparator(Map<Integer, String> map) {
this.map = map;
} public int compare(Integer a, Integer b) {
if (map.get(a).compareTo(map.get(b)) > 0) {
return 1;
} else {
return -1;
}
}
}

输出结果:

Sorted Map by Value: {5=Mary, 8=David, 10=John, 20=Steve, 30=Martin}

请注意,当使用自定义的比较器来按值排序时,您需要将其传递给treemap的构造函数,而不是使用默认的构造函数。

Treemap按key和value降序排序的更多相关文章

  1. 通过orderby关键字,LINQ可以实现升序和降序排序。LINQ还支持次要排序。

    通过orderby关键字,LINQ可以实现升序和降序排序.LINQ还支持次要排序. LINQ默认的排序是升序排序,如果你想使用降序排序,就要使用descending关键字. static void M ...

  2. java算法面试题:有一个字符串,其中包含中文字符、英文字符和数字字符,请统计和打印出各个字符的个数 按值的降序排序,如果值相同则按键值的字母顺序

    package com.swift; import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; publi ...

  3. c++ sort降序排序

    sort是c++ STL中提供的一个函数模板,可以用来对多种类型进行排序. 默认是升序排序.它有两种使用方法: default (1) template <class RandomAccessI ...

  4. 怎么实现元素ol的降序排序显示

    首先介绍一下什么是ol元素.这里直接引用MDN里面的定义:The HTML <ol> Element (or HTML Ordered List Element) represents a ...

  5. 现在输入 n 个数字, 以逗号, 分开; 然后可选择升或者 降序排序;

    /* 现在输入 n 个数字, 以逗号, 分开: 然后可选择升或者 降序排序: */ import java.util.*; public class bycomma{ public static St ...

  6. java数组降序排序之冒泡排序

    import java.util.Arrays;//必须加载 class Demo{ public static void main(String []args){ int[] arr={3,54,4 ...

  7. 用shell处理以下内容 1、按单词出现频率降序排序! 2、按字母出现频率降序排序! the squid project provides a number of resources toassist users design,implement and support squid installations. Please browsethe documentation and support

    此题目有多种解法,sed.awk.tr等等,都可以解决此题,命令运用灵活多变. 编写shell脚本no_20.sh 解法1: #!/bin/bash ###-------------CopyRight ...

  8. DataGridView使用技巧十三:点击列头实现升序和降序排序

    DataGridView 列有三种排序模式.每一列的排序模式是通过该列的 SortMode 属性指定的,该属性可以设置为以下的 DataGridViewColumnSortMode 枚举值之一. Da ...

  9. 【java】实体类中 按照特定的字段 进行升序/降序 排序

    背景: 实际页面上  所有的分值都是按照JSON格式存储在一个字符串中 存储在同一个字段中: {"ownPTotal":"10>0","ownO ...

  10. HTML中实现Table表头点击升序/降序排序

    题目:如下图,请实现表格信息的排序功能,当点击表头的属性区域,将表格信息进行排序切换功能,即第一次点击为降序排序,再一次点击进行升序排序. 姓名 力量 敏捷 智力 德鲁伊王 17 24 13 月之骑士 ...

随机推荐

  1. SQL-运算

    dual表可以进行运算select * from dual; 算数运算 + - * /select 5 + 6 as aaa ,6 - 3 as bbb ,5 * 7 as ccc ,9/2 as d ...

  2. ZSTUOJ平台刷题③:Problem A.--打印金字塔

    Problem A: 打印金字塔 Time Limit: 1 Sec  Memory Limit: 64 MBSubmit: 10011  Solved: 6227 Description 请编写程序 ...

  3. CGTime CMTimeRange CMTimeMapping 小结

    CMTime CMTimeRange CMTimeMapping 在使用 AVFoundation 框架处理多媒体资源时,通常会用到一些在 CoreMedia 框架中定义的结构体, 这里对其中描述时间 ...

  4. 开始 go

    为什么开始想转 go ? 毕业三年多,一直从事的是 Java , 大学学的也是 Java ,本来想一直干下去的,可是似乎 Java 水涨船高,面试要求也越来越高. 曾经一起毕业的同事自学 go ,已经 ...

  5. 量化交易——MACD是什么,用python来验证交易时把它作为买卖信号到底靠不靠谱

    在我刚开始学习股票的时候,是跟着b站上的视频学习的,当讲到macd的时候,up主反复强调macd是指标之王,股票里面有那么多的指标,但是却只有macd被称为指标之王,当macd出现金叉的时候,预示着股 ...

  6. Windows Powershell个性化设置

    1. 设置Powershell prompt只显示当前目录: 2. 设置Powershell title为当前路径: 这个文件的路径为:echo $profile # file location:ec ...

  7. 字节过滤流 --->对象流(存入对象的)----> ObjectOutputStream: 用法

    前提:1).要有一个类 并创建这个类的对象2)要让类必须继承Serializable接口3)transient修饰的属性 值不参与序列化1创建字节输出节点流FileOutputStream fos = ...

  8. 第12组 Beta冲刺 (3/5)

    1.1基本情况 ·队名:美少女战士 ·组长博客:https://www.cnblogs.com/yaningscnblogs/p/14016611.html ·作业博客:https://edu.cnb ...

  9. nRF51822蓝牙学习 进程记录 3:蓝牙协议学习--简单使用

    三天打鱼两天晒网,又学起了蓝牙,不过还好的是终于开始学习蓝牙协议部分了. 但是,一看起来增加了蓝牙协议的例程,真是没头绪啊.本身的教程资料解说太差了,看青风的蓝牙原理详解也是一头雾水. 经过不断地看各 ...

  10. 拉勾java核心类库--String类

    String类 @author :magiclx 摘要:String类是用final进行修饰的,关于字符串的一个类,其中包含很多个方法 关键词:String,常量池,正则表达式,数组转化 正文: 参考 ...