hashmap排序sort方法(如何对map中的value进行排序)

本文目录
如何对map中的value进行排序
一、map是键值对的集合接口,它的实现类主要包括:HashMap,TreeMap,Hashtable以及LinkedHashMap等。其中这四者的区别如下(简单介绍):
1、HashMap:我们最常用的Map,它根据key的HashCode 值来存储数据,根据key可以直接获取它的Value,同时它具有很快的访问速度。HashMap最多只允许一条记录的key值为Null(多条会覆盖);允许多条记录的Value为 Null。非同步的。
2、TreeMap: 能够把它保存的记录根据key排序,默认是按升序排序,也可以指定排序的比较器,当用Iterator 遍历TreeMap时,得到的记录是排过序的。TreeMap不允许key的值为null。非同步的。
3、Hashtable: 与 HashMap类似,不同的是:key和value的值均不允许为null;它支持线程的同步,即任一时刻只有一个线程能写Hashtable,因此也导致了Hashtale在写入时会比较慢。
4、LinkedHashMap: 保存了记录的插入顺序,在用Iterator遍历LinkedHashMap时,先得到的记录肯定是先插入的.在遍历的时候会比HashMap慢。key和value均允许为空,非同步的。
二、
1、TreeMap
TreeMap默认是升序的,如果我们需要改变排序方式,则需要使用比较器:Comparator。
1)Comparator可以对集合对象或者数组进行排序的比较器接口,实现该接口的public compare(T o1,To2)方法即可实现排序,该方法主要是根据第一个参数o1,小于、等于或者大于o2分别返回负整数、0或者正整数。
2)对value排序我们就需要借助于Collections的sort(List《T》 list, Comparator《?
super T》
c)方法,该方法根据指定比较器产生的顺序对指定列表进行排序。但是有一个前提条件,那就是所有的元素都必须能够根据所提供的比较器来进行比较。
2、HashMap
我们都是HashMap的值是没有顺序的,他是按照key的HashCode来实现的。
怎么对map里面的内容进行排序
你说的按要求排序,应该是有一些自定义规则排序吧,假如要通过值来排序可以用以下方法:
Java代码
public static void main(String args) {
Map《String, Integer》 map = new HashMap《String, Integer》();
map.put("lisi", 5);
map.put("lisi1", 1);
map.put("lisi2", 3);
map.put("lisi3", 9);
List《Map.Entry《String, Integer》》 infoIds = new ArrayList《Map.Entry《String, Integer》》(
map.entrySet());
System.out.println("--------------排序前--------------");
for (int i = 0; i 《 infoIds.size(); i++) {
String id = infoIds.get(i).toString();
System.out.println(id);
}
// 排序
Collections.sort(infoIds, new Comparator《Map.Entry《String, Integer》》() {
public int compare(Map.Entry《String, Integer》 o1,
Map.Entry《String, Integer》 o2) {
return ( o1.getValue()-o2.getValue());
}
});
System.out.println("--------------排序后--------------");
for (int i = 0; i 《 infoIds.size(); i++) {
Entry《String,Integer》 ent=infoIds.get(i);
System.out.println(ent.getKey()+"="+ent.getValue());
hashmap<>对key进行排序
1,如果是只针对key排序,完全不考虑value顺序,则排序如下:
Map《String, Integer》 map = new HashMap《String, Integer》();
map.put("2015-06-10", 3);
map.put("2015-06-09", 2);
map.put("2015-06-08", 1);
map.put("2015-06-11", 4);
List《String》 ll = new ArrayList《》(map.keySet());
Collections.sort(ll);
System.out.println(ll.toString());
ll就是key排序后的集合,其实根据排序后的key去map中取值就可以了
2,如果对key排序,同时value也相应的根据key排序呢变化,则排序如下
Map《String, Integer》 map = new HashMap《String, Integer》();
map.put("2015-06-10", 3);
map.put("2015-06-09", 2);
map.put("2015-06-08", 1);
map.put("2015-06-11", 4);
List《Map.Entry《String, Integer》》 list = new ArrayList《Map.Entry《String, Integer》》(map.entrySet());
Collections.sort(list, new Comparator《Map.Entry《String, Integer》》() {
public int compare(Map.Entry《String, Integer》 o1, Map.Entry《String, Integer》 o2) {
return (o1.getKey()).toString().compareTo(o2.getKey());
}
});
System.out.println(list.toString());
list就是map根据key排序后的结果
在java编程中如何对数组进行排序,并输出排序后的数组及原数组下标值
java变成对数组进行排序可以使用ArraySort方法,保存源数组下标值可以存入map中,如下代码:
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
public class ceshi {
public static void main(String args) {
int n = 5;
int a = { 8, 5, 4, 6, 2, 1, 7, 9, 3 };
HashMap map = new HashMap();
for (int i = 0; i 《 a.length; i++) {
map.put(a, i); // 将值和下标存入Map
}
// 排列
List list = new ArrayList();
Arrays.sort(a); // 升序排列
for (int i = 0; i 《 a.length; i++) {
list.add(a);
}
for (Object object : list) {
System.out.print(object + ",");
}
System.out.println();
// 查找原始下标
for (int i = 0; i 《 n; i++) {
System.out.print(map.get(a) + ",");
}
}
}
运行结果如下:
Java:输出不同整数的个数
程序的算法有问题,这样子写的话,只能对数组元素进行两两比较,达不到目的。
比如数组如果是 1 2 1 2 1 2,相邻的元素都不相同,但实际上1和2都是重复的整数,计算就错误了。
如果转换一下思维,可以使用HashMap做到对重复数据的个数统计功能,参考代码如下:
import java.util.Scanner;
import java.util.Map;
import java.util.HashMap;
public class RepeatCount{
public static void main(String args){
Scanner input = new Scanner(System.in);
int n = input.nextInt();
int m = 0;
int number = 0, count = 0;
Map《Integer, Integer》 map = new HashMap《》();
for(int i = 0; i 《 n; i++){
number = input.nextInt();
if(map.get(number) != null){
count = (int)map.get(number);
}else{
count = 0;
}
map.put(number, ++count);
}
for(Map.Entry《Integer, Integer》 entry : map.entrySet()){
if(entry.getValue() != 1){
m++;
}
}
System.out.println(m);
}
}

更多文章:
checked in(check in和check out的区别)
2026年9月7日 01:20
java经典上机编程题(java上机题 请问这道题应该怎么写)
2026年9月7日 01:10
影视剧中有哪些剧情颠覆了你的三观?金庸的武侠小说《白马啸西风》为什么没有被拍成电影或者电视剧
2026年9月7日 00:30
mysql varchar和char的区别(mysql中char、varchar、nvarchar区别)
2026年9月7日 00:10
linux命令的选项和参数(linux为什么要有参数和选项)
2026年9月6日 20:20
perseverance的意思(preseverance的意思)
2026年9月6日 18:30
react native和uniapp(h5和uniapp和react性能)
2026年9月6日 18:00
mysql查看有哪些表(在mysql里面怎么查看数据库里面有多少表)
2026年9月6日 17:40
parsefloat()(html里的parsefloat什嘛意思)
2026年9月6日 16:30




