本文概述

Java HashMap默认情况下不保留任何顺序。如果需要对HashMap进行排序, 我们将根据需求对其进行显式排序。 Java提供了一个根据键和值对HashMap进行排序的选项。在本节中, 我们将学习如何根据键和值对HashMap进行排序。

按键对HashMap排序

按值对HashMap排序

按键对HashMap排序

有以下几种按键对HashMap进行排序的方法:

通过使用TreeMap

通过使用LinkedHashMap

使用LinkedHashMap时, 应遵循以下过程:

当我们使用LinkedHashMap时, 我们需要获取Key set。将Set转换为List, 对列表进行排序, 然后以相同顺序将排序后的列表添加到LinkedHashMap中。我们在示例“按值对HashMap进行排序”中完成的相同过程。

按键对HashMap排序的示例

在下面的示例中, 我们使用TreeMap构造函数对元素进行排序, 并将HashMap类的对象作为参数传递。这是按键对HashMap排序的最简单方法。

import java.util.Map;

import java.util.HashMap;

import java.util.TreeMap;

import java.util.Iterator;

public class SortHashMapByKeys

{

public static void main(String args[])

{

//implementation of HashMap

HashMap hm=new HashMap();

//addding keys and values to HashMap

hm.put(23, "Yash");

hm.put(17, "Arun");

hm.put(15, "Swarit");

hm.put(9, "Neelesh");

Iterator it = hm.keySet().iterator();

System.out.println("Before Sorting");

while(it.hasNext())

{

int key=(int)it.next();

System.out.println("Roll no: "+key+" name: "+hm.get(key));

}

System.out.println("\n");

Map map=new HashMap();

System.out.println("After Sorting");

//using TreeMap constructor to sort the HashMap

TreeMap tm=new TreeMap (hm);

Iterator itr=tm.keySet().iterator();

while(itr.hasNext())

{

int key=(int)itr.next();

System.out.println("Roll no: "+key+" name: "+hm.get(key));

}

}

}

输出:

Before Sorting

Roll no: 17 name: Arun

Roll no: 23 name: Yash

Roll no: 9 name: Neelesh

Roll no: 15 name: Swarit

After Sorting

Roll no: 9 name: Neelesh

Roll no: 15 name: Swarit

Roll no: 17 name: Arun

Roll no: 23 name: Yash

使用比较器接口按值对HashMap进行排序

在Java中, 按值对HashMap进行排序很复杂, 因为没有可用的直接方法。要按值对HashMap进行排序, 我们需要创建一个Comparator。它根据值比较两个元素。

之后, 从Map中获取元素集并将Set转换为List。使用Collections.sort(List)方法通过传递自定义比较器, 按值对元素列表进行排序。现在创建一个新的LinkedHashMap并将已排序的元素复制到其中。由于LinkedHashMap保证了映射的插入顺序。我们得到一个HashMap, 其值按排序顺序。

按“键”和“值”对HashMap进行排序之间有一个细微的区别, 即它可以具有重复的值, 但不能具有重复的键。我们无法使用TreeMap对值进行排序, 因为TreeMap通过键对元素进行排序。

按值对HashMap排序的示例

import java.util.Collections;

import java.util.Comparator;

import java.util.HashMap;

import java.util.Iterator;

import java.util.LinkedHashMap;

import java.util.LinkedList;

import java.util.List;

import java.util.Map;

import java.util.Set;

public class SortHashMapValue

{

public static void main(String[] args)

{

//implementing HashMap

HashMap hm = new HashMap();

hm.put(6, "Tushar");

hm.put(12, "Ashu");

hm.put(5, "Zoya");

hm.put(78, "Yash");

hm.put(10, "Praveen");

hm.put(67, "Boby");

hm.put(1, "Ritesh");

System.out.println("Before Sorting:");

Set set = hm.entrySet();

Iterator iterator = set.iterator();

while(iterator.hasNext())

{

Map.Entry map = (Map.Entry)iterator.next();

System.out.println("Roll no: "+map.getKey()+" Name: "+map.getValue());

}

Map map = sortValues(hm);

System.out.println("\n");

System.out.println("After Sorting:");

Set set2 = map.entrySet();

Iterator iterator2 = set2.iterator();

while(iterator2.hasNext())

{

Map.Entry me2 = (Map.Entry)iterator2.next();

System.out.println("Roll no: "+me2.getKey()+" Name: "+me2.getValue());

}

}

//method to sort values

private static HashMap sortValues(HashMap map)

{

List list = new LinkedList(map.entrySet());

//Custom Comparator

Collections.sort(list, new Comparator()

{

public int compare(Object o1, Object o2)

{

return ((Comparable) ((Map.Entry) (o1)).getValue()).compareTo(((Map.Entry) (o2)).getValue());

}

});

//copying the sorted list in HashMap to preserve the iteration order

HashMap sortedHashMap = new LinkedHashMap();

for (Iterator it = list.iterator(); it.hasNext();)

{

Map.Entry entry = (Map.Entry) it.next();

sortedHashMap.put(entry.getKey(), entry.getValue());

}

return sortedHashMap;

}

}

输出:

Before Sorting:

Roll no: 1 Name: Ritesh

Roll no: 67 Name: Boby

Roll no: 5 Name: Zoya

Roll no: 6 Name: Tushar

Roll no: 10 Name: Praveen

Roll no: 12 Name: Ashu

Roll no: 78 Name: Yash

After Sorting:

Roll no: 12 Name: Ashu

Roll no: 67 Name: Boby

Roll no: 10 Name: Praveen

Roll no: 1 Name: Ritesh

Roll no: 6 Name: Tushar

Roll no: 78 Name: Yash

Roll no: 5 Name: Zoya

hashmap自定义排序java,如何在Java中对HashMap进行排序相关推荐

  1. mysql按域排序_如何在MySQL中对域名进行排序?

    要对域名进行排序,请使用ORDER BY SUBSTRING_INDEX().让我们首先创建一个表-mysql> create table DemoTable670(DomainName tex ...

  2. java字符排序_Java实现对字符串中的数值进行排序操作示例

    本文实例讲述了Java实现对字符串中的数值进行排序操作.分享给大家供大家参考,具体如下: 问题: 对"34 9 -7 12 67 25"这个字符串中的数值从小到大排序! 解决方法: ...

  3. [转载] java中对数组进行排序_如何在Java中对数组排序

    参考链接: Java中main()的有效变体 java中对数组进行排序 Java Array is like a container that can hold a fixed number of t ...

  4. java对列表数据排序_如何在Java中对列表进行排序

    java对列表数据排序 Sometimes we have to sort a list in Java before processing its elements. In this tutoria ...

  5. java中对数组进行排序_如何在Java中对数组排序

    java中对数组进行排序 Java Array is like a container that can hold a fixed number of the same type of items, ...

  6. java 自定义xml_6.1 如何在spring中自定义xml标签

    dubbo自定义了很多xml标签,例如,那么这些自定义标签是怎么与spring结合起来的呢?我们先看一个简单的例子. 一 编写模型类 1 packagecom.hulk.testdubbo.model ...

  7. matlab怎么做到使用java,如何在Matlab中使用java.nio?

    我的目标是检查在网络上的文件夹中是否找到具有特定名称(名称的一部分)的文件,同时还要考虑其下的所有文件夹.为此,我需要一种有效获取给定文件夹内和下的所有文件和文件夹的列表的方法.我的递归函数在本地驱动 ...

  8. python set 排序_python set 排序_如何在Python中使用sorted()和sort()

    点击"蓝字"关注我们 ?"Python基础知识" 大卫·丰达科夫斯基  著 18财税3班 李潇潇    译 日期:2019年5月6日 一. 使用sorted() ...

  9. eclipse中自定义视图_如何在Windows中自定义文件夹视图设置

    eclipse中自定义视图 While the Windows File Explorer seems somewhat simplified compared to older versions, ...

  10. sql怎么实现线性排序_如何在SQL中实现排序间接

    sql怎么实现线性排序 我最近偶然发现了一个有趣的Stack Overflow问题 ,该问题本质上是用户希望确保以明确定义的顺序交付结果记录. 他们写 SELECT name FROM product ...

最新文章

  1. linux putty xshell vi 小键盘无法使用的解决方法
  2. 白话Elasticsearch05- 结构化搜索之使用range query来进行范围过滤
  3. 第四范式连续两年入选CB Insights全球AI百强榜
  4. [攻防世界 pwn]——level2
  5. nat,acl及单臂路由实验(ensp)
  6. tcpdump抓两个网卡的包_tcpdump 抓包统计 分享助,请问用tcpdump抓包后,如何查看每个包...
  7. 为什么你总是申请不到大额贷款?
  8. npm run build 报错 versionRequirement: packageConfig.engines.node 'node' of undefined
  9. UnityShader10:CG标准函数库
  10. Android系统信息获取 之七:获取IP地址和MAC地址
  11. !doctype html public 广告飘窗不能用了,页面广告飘窗
  12. SuperMemo导出html,使用思维导图和SuperMemo一起来快速复习(1)
  13. php 计算今天周几,php如何计算当前日期是周几
  14. selenium鼠标操作
  15. 英文和数字组合 正则 密码验证
  16. 【生活中的逻辑谬误】以泪掩过和以笑饰非
  17. krpano学习——xml代码
  18. 模拟磁盘调度 课程设计(操作系统 C语言)
  19. tensorflow tf.tile 使用教程·
  20. Nervos CKB初体验

热门文章

  1. 计算机二级用的ms什么版本,计算机二级ms office用的哪个版本
  2. 解决方案:Android开发基于rtmp视频直播
  3. 生信技能树linux虚拟机,生信人的linux考试-生信技能树学习笔记
  4. matlab 设置计算精度,matlab计算精度设置
  5. 沉痛悼念游戏开发技术专家毛星云
  6. 2021考研数学二汤家凤接力题典1800
  7. asc 点阵数组和计算认识
  8. 华为薪酬体系的整体框架
  9. 制作一个含生僻字的矢量字体文件(*.shx)
  10. 北大学霸的超级学习术: 颠覆传统学习,效率轻松高10倍