java map 对key排序_Java Map 键值对排序 按key排序和按Value排序

news/2024/7/5 6:47:07

一.理论准备

Map是键值对的集合接口,它的实现类主要包括:HashMap,TreeMap,Hashtable以及LinkedHashMap等。

TreeMap:基于红黑树(Red-Black tree)的 NavigableMap 实现,该映射根据其键的自然顺序进行排序,或者根据创建映射时提供的 Comparator 进行排序,具体取决于使用的构造方法。

HashMap的值是没有顺序的,它是按照key的HashCode来实现的,对于这个无序的HashMap我们要怎么来实现排序呢?参照TreeMap的value排序。

Map.Entry返回Collections视图。

二.key排序

TreeMap默认是升序的,如果我们需要改变排序方式,则需要使用比较器:Comparator。Comparator可以对集合对象或者数组进行排序的比较器接口,实现该接口的public compare(T o1,To2)方法即可实现排序,如下:

import java.util.Comparator;

import java.util.Iterator;

import java.util.Map;

import java.util.Set;

import java.util.TreeMap;

public class TreeMapTest {

public static void main(String[] args) {

Map map = new TreeMap(

new Comparator() {

public int compare(String obj1, String obj2) {

// 降序排序

return obj2.compareTo(obj1);

}

});

map.put("b", "ccccc");

map.put("d", "aaaaa");

map.put("c", "bbbbb");

map.put("a", "ddddd");

Set keySet = map.keySet();

Iterator iter = keySet.iterator();

while (iter.hasNext()) {

String key = iter.next();

System.out.println(key + ":" + map.get(key));

}

}

}

运行结果如下:

d:aaaaa

c:bbbbb

b:ccccc

a:ddddd

三.value排序

上面例子是对根据TreeMap的key值来进行排序的,但是有时我们需要根据TreeMap的value来进行排序。对value排序我们就需要借助于Collections的sort(List list, Comparator super T> c)方法,该方法根据指定比较器产生的顺序对指定列表进行排序。但是有一个前提条件,那就是所有的元素都必须能够根据所提供的比较器来进行比较,如下:

import java.util.ArrayList;

import java.util.Collections;

import java.util.Comparator;

import java.util.List;

import java.util.Map;

import java.util.Map.Entry;

import java.util.TreeMap;

public class TreeMapTest {

public static void main(String[] args) {

Map map = new TreeMap();

map.put("a", "ddddd");

map.put("c", "bbbbb");

map.put("d", "aaaaa");

map.put("b", "ccccc");

//这里将map.entrySet()转换成list

List> list = new ArrayList>(map.entrySet());

//然后通过比较器来实现排序

Collections.sort(list,new Comparator>() {

//升序排序

public int compare(Entry o1,

Entry o2) {

return o1.getValue().compareTo(o2.getValue());

}

});

for(Map.Entry mapping:list){

System.out.println(mapping.getKey()+":"+mapping.getValue());

}

}

}

运行结果如下:

d:aaaaa

c:bbbbb

b:ccccc

a:ddddd


http://www.niftyadmin.cn/n/673661.html

相关文章

股德

这段时间开始狂关注股票,原因是基金给我的收益实在太少了,搞了半年才1W都没到,碰到530,还算好没被套,到底还有些利润,要知道很多人都套在里面,浪费了时间,金钱,还伤了身体…

java id 生成器_JAVA ID生成器生成逻辑主键_java

在一个数据库设计里,假如使用了逻辑主键,那么你一般都需要一个ID生成器去生成逻辑主键。在许多数据库里面,都提供了ID生成的机制,如oracle中的sequence,MSSQL中的identity,可惜这些方法各种数据库都不同的&…

方圆支承、荣盛发展2家公司8月8日挂牌中小板

今日,深交所披露,方圆支承将于8月8日挂牌中小板,其证券简称为“方圆支承”,证券代码为“002147”,该公司人民币普通股股份总数为9400万股,其中首次上网定价公开发行的1920万股股票自上市之日起开始上市交易…

java frame 显示图片_java Frame中显示不出图片来啊

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼package com.hb.study;import java.awt.BorderLayout;import java.awt.Canvas;import java.awt.Color;import java.awt.Frame;import java.awt.Graphics;import java.awt.Image;import java.awt.Toolkit;import java.awt.event.Win…

新股发行一览

股票代码股票简称申购代码发行股数(万)发行价格认购日期中签号公布日上市日期发行市盈率相关链接 002163 三鑫股份 002163 3,400 07-8-9 (周四) 8-15 详细 行情 资讯 评论 002164 东力传动 002164 3,000 8.20 07-8-8 (周三&am…

java在文件中查找指定单词后面_Java开发网 - 如何从一个文件中找到指定的单词?...

{请您活用编辑功能修饰您的代码,别忘了禁止笑脸标记,谢谢}import java.io.*;import java.nio.*;import java.nio.channels.*;import java.nio.charset.*;public class Search {public static void main(String[] args) throws IOException {if(args.leng…

强者恒强,重心上移,关注高价股全面爆发机会!

历经6、7两月的大幅震荡之后,股指重归强势并创出新高。两个月的调整中,高价股的数量持续增加,其整体市场表现也大幅领先于中、低价股,可谓强者恒强。 以7月31日收盘数据计算,加权市场平均股价为13.48元,而以…

java中调用oracle存储过程_java中调用oracle存储过程

1. 由于每个存储过程的参数不同,可以编写以一个类提出所有操作。package com.lvhe.core.db;import java.sql.CallableStatement;import java.sql.Date;import java.sql.SQLException;import java.sql.Time;import java.sql.Timestamp;import java.util.ArrayList;…