Java实现HashMap排序方法的示例详解(Hashmap 排序)

网友投稿 475 2022-07-28


目录简介排序已有数据按key排序按value排序按插入顺序存放HashMap不按插入顺序存放LinkedHashMap会按照插入顺序存放

简介

本文用示例介绍HashMap排序的方法。

排序已有数据

按key排序

使用stream进行排序(按key升序/降序)

package org.example.a;

import java.util.*;

public class Demo {

public static void main(String[] args) {

Map map = new HashMap<>();

map.put("ad", "dd");

map.put("bc", "ee");

map.put("cb", "ff");

for (Map.Entry entry : map.entrySet()) {

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

}

System.out.println();

Map linkedHashMap = new LinkedHashMap<>();

// 默认按照升序排列

map.entrySet().stream().sorted(Map.Entry.comparingByKey())

.forEach(o -> linkedHashMap.put(o.getKey(), o.getValue()));

for (Map.Entry entry : linkedHashMap.entrySet()) {

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

}

System.out.println();

Map linkedHashMap1 = new LinkedHashMap<>();

// 自定义排序(降序)

map.entrySet().stream().sorted(Map.Entry.comparingByKey(new Comparator() {

@Override

public int compare(String o1, String o2) {

return o2.compareTo(o1);

}

})).forEach(o -> linkedHashMap1.put(o.getKey(), o.getValue()));

for (Map.Entry entry : linkedHashMap1.entrySet()) {

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

}

}

}

执行结果

bc:eead:ddcb:ff ad:ddbc:eecb:ff cb:ffbc:eead:dd

HashMap转TreeMap自定义排序(按key升序/降序)

package org.example.a;

import java.util.Comparator;

import java.util.HashMap;

import java.util.Map;

import java.util.TreeMap;

public class Demo {

public static void main(String[] args) {

Map map = new HashMap<>();

map.put("ad", "dd");

map.put("bc", "ee");

map.put("cb", "ff");

for (Map.Entry entry : map.entrySet()) {

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

}

System.out.println();

// 默认按照升序排序

Map map1 = new TreeMap<>();

map.forEach(map1::put);

for (Map.Entry entry : map1.entrySet()) {

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

}

System.out.println();

// 自定义排序(降序)

Map map2 = new TreeMap<>(new Comparator() {

@Override

public int compare(String o1, String o2) {

return o2.compareTo(o1);

}

});

map.forEach(map2::put);

for (Map.Entry entry : map2.entrySet()) {

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

}

}

}

执行结果

bc:eead:ddcb:ff ad:ddbc:eecb:ff cb:ffbc:eead:dd

按value排序

使用stream进行排序(按value升序/降序)

package org.example.a;

import java.util.*;

public class Demo {

public static void main(String[] args) {

Map map = new HashMap<>();

map.put("ad", "dd");

map.put("bc", "ee");

map.put("cb", "ff");

for (Map.Entry entry : map.entrySet()) {

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

}

System.out.println();

Map linkedHashMap = new LinkedHashMap<>();

// 默认按照升序排列

map.entrySet().stream().sorted(Map.Entry.comparingByValue())

.forEach(o -> linkedHashMap.put(o.getKey(), o.getValue()));

for (Map.Entry entry : linkedHashMap.entrySet()) {

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

}

System.out.println();

Map linkedHashMap1 = new LinkedHashMap<>();

// 自定义排序(降序)

map.entrySet().stream().sorted(Map.Entry.comparingByValue(new Comparator() {

@Override

public int compare(String o1, String o2) {

return o2.compareTo(o1);

}

})).forEach(o -> linkedHashMap1.put(o.getKey(), o.getValue()));

for (Map.Entry entry : linkedHashMap1.entrySet()) {

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

}

}

}

执行结果

bc:eead:ddcb:ff ad:ddbc:eecb:ff cb:ffbc:eead:dd

借助List进行排序(按value升序/降序)

原理:将待排序Map中的所有元素置于一个列表中,接着使用Collections的一个静态方法 sort(List list, Comparator super T> c) 来排序列表,同样是用比较器定义比较规则。排序后的列表中的元素再依次装入Map,为了肯定的保证Map中元素与排序后的List中的元素的顺序一致,使用了LinkedHashMap数据类型。

本处只写升序代码,降序只是调换个顺序而已。

package org.example.a;

import java.util.*;

public class Demo {

public static void main(String[] args) {

Map map = new HashMap<>();

map.put("ad", "dd");

map.put("bc", "ee");

map.put("cb", "ff");

for (MYZqbWGamTwap.Entry entry : map.entrySet()) {

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

}

System.out.println();

Map sortedMap = new LinkedHashMap<>();

List> entryList = new ArrayList>(

map.entrySet());

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

@Override

public int compare(Map.Entry me1, Map.Entry me2) {

return me1.getValue().compareTo(me2.getValue());

}

});

for (Map.Entry stringStringEntry : entryList) {

sortedMap.put(stringStringEntry.getKey(), stringStringEntry.getValue());

}

for (Map.Entry entry : sortedMap.entrySet()) {

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

}

}

}

运行结果

bc:eead:ddcb:ff ad:ddbc:eecb:ff

按插入顺序存放

HashMap不按插入顺序存放

package org.example.a;

import java.util.*;

public class Demo{

public static List arrayList = new ArrayList();

public static void main(String[] args) {

Map hashMap = new HashMap();

hashMap.put("name1", "josan1");

hashMap.put("name2", "josan2");

hashMap.put("name3", "josan3");

Set> set = hashMap.entrySet();

Iterator> iterator = set.iterator();

while(iterator.hasNext()) {

Map.Entry entry = iterator.next();

String key = (String) entry.getKey();

String value = (String) entry.getValue();

System.out.println("key:" + key + ", value:" + value);

}

}

}

执行结果(未按照插入顺序输出)

key:name3, value:josan3key:name2, value:josan2key:name1, value:josan1

LinkedHashMap会按照插入顺序存放

package org.example.a;

import java.util.*;

public class Demo{

public static List arrayList = new ArrayList();

public static void main(String[] args) {

Map hashMap = new LinkedHashMap();

hashMap.put("name1", "josan1");

hashMap.put("name2", "josan2");

hashMap.put("name3", "josan3");

Set> set = hashMap.entrySet();

Iterator> iterator = set.iterator();

while(iterator.hasNext()) {

Map.Entry entry = iterator.next();

String key = (String) entry.getKey();

String value = (String) entry.getValue();

System.out.println("key:" + key + ", value:" + value);

}

}

}

执行结果(按照插入顺序输出)

key:name1, value:josan1key:name2, value:josan2key:name3, value:josan3

以上就是Java实现HashMap排序方法的示例详解的详细内容,更多关于Java HashMap排序的资料请关注我们其它相关文章!


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Java 8 Time Api 使用方法技巧
下一篇:详解Spring Security中权限注解的使用(详解Spring Boot Security)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~