Treemap按key和value降序排序
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降序排序的更多相关文章
- 通过orderby关键字,LINQ可以实现升序和降序排序。LINQ还支持次要排序。
通过orderby关键字,LINQ可以实现升序和降序排序.LINQ还支持次要排序. LINQ默认的排序是升序排序,如果你想使用降序排序,就要使用descending关键字. static void M ...
- java算法面试题:有一个字符串,其中包含中文字符、英文字符和数字字符,请统计和打印出各个字符的个数 按值的降序排序,如果值相同则按键值的字母顺序
package com.swift; import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; publi ...
- c++ sort降序排序
sort是c++ STL中提供的一个函数模板,可以用来对多种类型进行排序. 默认是升序排序.它有两种使用方法: default (1) template <class RandomAccessI ...
- 怎么实现元素ol的降序排序显示
首先介绍一下什么是ol元素.这里直接引用MDN里面的定义:The HTML <ol> Element (or HTML Ordered List Element) represents a ...
- 现在输入 n 个数字, 以逗号, 分开; 然后可选择升或者 降序排序;
/* 现在输入 n 个数字, 以逗号, 分开: 然后可选择升或者 降序排序: */ import java.util.*; public class bycomma{ public static St ...
- java数组降序排序之冒泡排序
import java.util.Arrays;//必须加载 class Demo{ public static void main(String []args){ int[] arr={3,54,4 ...
- 用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 ...
- DataGridView使用技巧十三:点击列头实现升序和降序排序
DataGridView 列有三种排序模式.每一列的排序模式是通过该列的 SortMode 属性指定的,该属性可以设置为以下的 DataGridViewColumnSortMode 枚举值之一. Da ...
- 【java】实体类中 按照特定的字段 进行升序/降序 排序
背景: 实际页面上 所有的分值都是按照JSON格式存储在一个字符串中 存储在同一个字段中: {"ownPTotal":"10>0","ownO ...
- HTML中实现Table表头点击升序/降序排序
题目:如下图,请实现表格信息的排序功能,当点击表头的属性区域,将表格信息进行排序切换功能,即第一次点击为降序排序,再一次点击进行升序排序. 姓名 力量 敏捷 智力 德鲁伊王 17 24 13 月之骑士 ...
随机推荐
- 作业三:CART回归树
作业三:CART回归树 20大数据三班 博客链接 学号 201613336 问题一: 表1为拖欠贷款人员训练样本数据集,使用CART算法基于该表数据构造决策树模型,并使用表2中测试样本集确定剪枝后的最 ...
- 32 项目结构 & 事务 & Logging日志
1 项目结构 以下主要是以drf编写api时的结构为示例. 1.1 APP结构 1.1.1 单APP 例如:订单系统 1.1.2 Base + 业务APP 例如:供应链系统 1.1.3 独立的APP ...
- CH32F103C8T6的USB开发(一)
一.背景 项目用到单片机采集模拟量数据,原先使用USB转串口,速度嫌慢,还要转串口芯片,电脑还要安装驱动,现更改为采用USB的HID类来传输. 二.单片机选型 STM32F103的USB接口简单易用, ...
- Day10-数组
数组 一.什么是数组 数组是相同数据类型的有序集合 数字描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成 其中.每一个数据称作一个数组元素,每个数组元素可以通过一个下表来访问它们 二.数组 ...
- qt的窗口
1.窗口.字部件以及窗口类型(记得不牢固的) (1)#include<QtWidget> Widgets是在Qt中创建用户界面的主要元素. Widgets可以显示数据和状态信息,接收用 ...
- 源代码管理工具:Github
GitHub是一个基于Git的进行版本控制的代码托管网站. Git指的是是一个开放源代码版本控制系统,由Linus Torvalds启动.在时间的累积下,现在的Github是一个最大的开源软件社区.在 ...
- thymeleaf基础学习
Thymeleaf 1.标准表达式 ${...}:变量表达式 *{...}: 选择表达式 #{...} : 消息表达式 @{...}: 连接表达式 <img th:src="@{url ...
- golang sync.RWMutex总结笔记
背景 最近项目中遇到两次RWMutex死锁问题,所以稍微看了一下资料和源码,稍作记录 源码 type RWMutex struct { w Mutex // held if there are pen ...
- npm publish命令
npm publish . 注意后面有个点,否则会报错
- Abp学习(一) abp+vue +mysql框架搭建
一.到Abp官网下载框架 地址:https://aspnetboilerplate.com/Templates 二.打开项目 修改数据库连接为MySql,默认是SQL Server 2.1.修改链接字 ...