java的hashmap排序_Java HashMap两种简便排序方法解析
这篇文章主要介绍了Java HashMap两种简便排序方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
HashMap的储存是没有顺序的,而是按照key的HashCode实现.
key=手机品牌,value=价格,这里以这个例子实现按名称排序和按价格排序.
Map phone=new HashMap();
phone.put("Apple",8899);
phone.put("SAMSUNG",7000);
phone.put("Meizu",2698);
phone.put("Xiaomi",1800);
System.out.println(phone);
直接输出HashMap得到的是一个无序Map(不是Arraylist那种顺序型储存)
1. 按key排序
对名称进行排序,首先要得到HashMap中键的集合(keySet),并转换为数组,这样才能用Arrays.sort()进行排序
Set set=phone.keySet();
Object[] arr=set.toArray();
Arrays.sort(arr);
for(Object key:arr){
System.out.println(key);
}
得到排序好的键值
最后利用HashMap.get(key)得到键对应的值即可
for(Object key:arr){
System.out.println(key+": "+phone.get(key));
}
得到的打印的结果
2.按value排序
对价格进行排序,首先需要得到HashMap中的包含映射关系的视图(entrySet),
如图:
将entrySet转换为List,然后重写比较器比较即可.这里可以使用List.sort(comparator),也可以使用Collections.sort(list,comparator)
转换为list
List> list = new ArrayList>(phone.entrySet()); //转换为list
使用list.sort()排序
list.sort(new Comparator>() {
@Override
public int compare(Map.Entry o1, Map.Entry o2) {
return o2.getValue().compareTo(o1.getValue());
}
});
使用Collections.sort()排序
Collections.sort(list, new Comparator>() {
@Override
public int compare(Map.Entry o1, Map.Entry o2) {
return o2.getValue().compareTo(o1.getValue());
}
});
两种方式结果输出
//for循环
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i).getKey() + ": " + list.get(i).getValue());
}
//for-each循环
for (Map.Entry mapping : list){
System.out.println(mapping.getKey()+": "+mapping.getValue());
}
遍历打印输出
//for
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i).getKey() + ": " +list.get(i).getValue());
}
System.out.println();
//for-each
for (Map.Entry mapping : list) {
System.out.println(mapping.getKey() + ": " +mapping.getValue());
}
结果
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
java的hashmap排序_Java HashMap两种简便排序方法解析相关推荐
- java 多线程间通讯_JAVA多线程间通讯常用实现方法解析
如何实现线程间通讯,有如下三种方法: 1.使用Semaphore (信号量)类来控制线程的等待和释放 功能:三个线程 a .b .c 并发运行,b,c 需要 a 线程的数据怎么实现 分析:考虑到多线程 ...
- java 鸡尾酒排序_Java实现几种常见排序方法
日常操作中常见的排序方法有:冒泡排序.快速排序.选择排序.插入排序.希尔排序,甚至还有基数排序.鸡尾酒排序.桶排序.鸽巢排序.归并排序等. 冒泡排序是一种简单的排序算法.它重复地走访过要排序的数列,一 ...
- java 两个list排序_java实现两个不同list对象合并后并排序
工作上遇到一个要求两个不同list对象合并后并排序 1.问题描述 从数据库中查询两张表的当天数据,并对这两张表的数据,进行合并,然后根据时间排序. 2.思路 从数据库中查询到的数据放到各自list中, ...
- Java生成二维码的两种方法
本文介绍Java生成二维码的两种方法,这两种方法都依赖于google提供的二维码依赖包. 一种是自己写工具类,代码可以网上抄. 另一种是使用hutool第三方工具类的依赖包,不用自己抄代码. 一.自定 ...
- Java中的string定义的两种方法和区别
java中的String定义的两种方法和区别 第一种:new方式 String s1 = new String("hello world"); String s2 = new St ...
- java项目打jar包的两种情况
java项目打jar包的两种情况 本文介绍一下java项目打jar包时的两种情况各怎么操作 方法/步骤 1. 1 一.java项目没有导入第三方jar包 这时候打包就比较简单: 1. 首先在Ecl ...
- Java中线程的创建有两种方式
Java中继承thread类与实现Runnable接口的区别 Java中线程的创建有两种方式: 1. 通过继承Thread类,重写Thread的run()方法,将线程运行的逻辑放在其中 2. 通过 ...
- 【转载】面向对象建模与数据库建模两种分析设计方法的比较
[转载]面向对象建模与数据库建模两种分析设计方法的比较 板桥里人 http://www.jdon.com 2007/9/23(转载请保留) 我们知道:一个软件从无到有需要经过如下几个阶段:分析.设计. ...
- matlab 遍历每个像素点,Mat中两种像素遍历方法比较
小白,入门中,不足其指正.刚刚接触opencv,从一个Matlab风格的编程环境突然跳转到C++,实在有些不适.单就pixels scanning花了好长时间研究.opencv-tutorials给出 ...
- Hbase表两种数据备份方法-导入和导出示例
Hbase表两种数据备份方法-导入和导出示例 本文将提供两种备份方法 -- 1) 基于Hbase提供的类对hbase中某张表进行备份 2) 基于Hbase snapshot数据快速备份方法 场合:由于 ...
最新文章
- 我从500个技术号,选出这10个厉害的推荐给你!
- 假如我是超级卷王......
- 不允许 ASSIGNMENT 语句中包含 FOR XML 子句。
- 014_insert into select语句
- C++检查给定数字是否为4的幂的算法实现(附完整源码)
- 用指针交换两个数_C语言100题集合026-使用指针交换两个数组中的最大值
- bootstrap——强大的网页设计元素模板
- java file 其他电脑上_将MultipartFile转换为java.io.File而不复制到本地计算机
- javascript中一个字符占几个字节
- 1160. 不容易系列之二
- winsxs是什么文件夹 Winsxs文件夹可以删除吗
- 隔行插入行——《超级处理器》应用
- Linux: fPIC与 pie 区别
- sha算法 哈希算法_SHA1哈希算法教程及其用法示例
- C语言中的void和void*的定义及用法
- MT7628开发环境搭建
- mac java调用浏览器_mac osx 下 浏览器 开启 java
- html隐藏m3u8文件,播放具有HTML视频标签的m3u8文件
- delphi 多线程
- 计算机毕业设计Node.js+Vue二手图书回收销售网站(程序+源码+LW+部署)
热门文章
- 服务器系统用哪个版本好,windows服务器系统哪个版本好用
- 社区列表根据关注人数排序(排行榜)的实现思路整理
- java大小写同时转换(大写的转为小写,小写转为大写)
- 毛星云opencv第二章总结
- 冰点下载器手机版apk_冰点下载器官网
- 文献笔记(4)(2018ISSCC 13.3)
- android 断点下载的实现,自己动手实现一个Android断点下载
- 三次B样条拟合及一阶导、二阶导、曲率计算
- 谷粒商城-个人笔记(基础篇一)
- Python 量化投资实战教程(5) — A股回测KDJ 策略