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. Jmeter添加while控制器

    通过添加while控制器,可以实现条件+循环判断,使while控制器内的子线程根据之前线程的返回(while控制器内外变量皆可)进行触发+循环的控制. 原理如下:通过Condition判断条件语句是否 ...

  2. go两种数据类型的区别、数据类型和操作符、常量、变量声明

    值类型和引用类型 1.值类型:变量直接存储值,内存通常在栈中分配. 基本数据类型int.float.bool.string以及数组和struct. 2.引用类型:变量存储的是一个地址,这个地址存储最终 ...

  3. Debug --> python中的True False 0 1

    今天看了下python中的一些基础知识,以offer64为例叭! 求 1+2+...+n ,要求不能使用乘除法.for.while.if.else.switch.case等关键字及条件判断语句(A?B ...

  4. 浏览器对象模型(BOM)中的History对象模型

  5. MSSQL T-SQL 基础 (创建、增、删、改)

    1.创建数据库 create database StudentAchievementMS ----创建数据库,可以只执行此行来创建数据库,但以下属性都是默认 on primary --主数据文件 ( ...

  6. SQL Server之Cross apply

    1 --这样是不行的 2 select sys.dm_exec_sql_text(most_recent_sql_handle) from sys.dm_exec_connections 3 4 -- ...

  7. 1011.Django状态保持以及表单

    一.session保持状态 状态保持: 1. http协议是无状态的:每次请求都是一次新的请求,不会记得之前通信的状态: 2. 客户端与服务器端的一次通信,就是一次会话实现状态保持的方式:在客户端或服 ...

  8. shell编程【一】

    参考网址:[Linux命令大全][]:https://linux265.com/course/linux-commands.html 为什么要学习shell指令? 学习shell指令的本身也是在了解L ...

  9. CatDCGAN项目复现与对抗网络初识

    CatDCGAN项目复现与对抗网络初识 作者 CarpVexing 日期 100521 禁止转载 目录 CatDCGAN项目复现与对抗网络初识 引言 CatDCGAN项目基本信息 复现项目的准备工作 ...

  10. AtCoder-abc230_g GCD Permutation 容斥

    J - GCD Permutation 传送门: J - GCD Permutation 知识点:素数筛.容斥定理.gcd 题意:长度为n的一个排列a中,求满足\(gcd(i,j)!=1 且 gcd( ...