Java實(shí)現(xiàn)HashMap排序方法的示例詳解
簡介
本文用示例介紹HashMap排序的方法。
排序已有數(shù)據(jù)
按key排序
使用stream進(jìn)行排序(按key升序/降序)
package org.example.a;
import java.util.*;
public class Demo {
public static void main(String[] args) {
Map<String, String> map = new HashMap<>();
map.put("ad", "dd");
map.put("bc", "ee");
map.put("cb", "ff");
for (Map.Entry<String, String> entry : map.entrySet()) {
System.out.println(entry.getKey() + ":" + entry.getValue());
}
System.out.println();
Map<String, String> linkedHashMap = new LinkedHashMap<>();
// 默認(rèn)按照升序排列
map.entrySet().stream().sorted(Map.Entry.comparingByKey())
.forEach(o -> linkedHashMap.put(o.getKey(), o.getValue()));
for (Map.Entry<String, String> entry : linkedHashMap.entrySet()) {
System.out.println(entry.getKey() + ":" + entry.getValue());
}
System.out.println();
Map<String, String> linkedHashMap1 = new LinkedHashMap<>();
// 自定義排序(降序)
map.entrySet().stream().sorted(Map.Entry.comparingByKey(new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return o2.compareTo(o1);
}
})).forEach(o -> linkedHashMap1.put(o.getKey(), o.getValue()));
for (Map.Entry<String, String> entry : linkedHashMap1.entrySet()) {
System.out.println(entry.getKey() + ":" + entry.getValue());
}
}
}執(zhí)行結(jié)果
bc:ee
ad:dd
cb:ff
ad:dd
bc:ee
cb:ff
cb:ff
bc:ee
ad:dd
HashMap轉(zhuǎn)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<String, String> map = new HashMap<>();
map.put("ad", "dd");
map.put("bc", "ee");
map.put("cb", "ff");
for (Map.Entry<String, String> entry : map.entrySet()) {
System.out.println(entry.getKey() + ":" + entry.getValue());
}
System.out.println();
// 默認(rèn)按照升序排序
Map<String, String> map1 = new TreeMap<>();
map.forEach(map1::put);
for (Map.Entry<String, String> entry : map1.entrySet()) {
System.out.println(entry.getKey() + ":" + entry.getValue());
}
System.out.println();
// 自定義排序(降序)
Map<String, String> map2 = new TreeMap<>(new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return o2.compareTo(o1);
}
});
map.forEach(map2::put);
for (Map.Entry<String, String> entry : map2.entrySet()) {
System.out.println(entry.getKey() + ":" + entry.getValue());
}
}
}執(zhí)行結(jié)果
bc:ee
ad:dd
cb:ff
ad:dd
bc:ee
cb:ff
cb:ff
bc:ee
ad:dd
按value排序
使用stream進(jìn)行排序(按value升序/降序)
package org.example.a;
import java.util.*;
public class Demo {
public static void main(String[] args) {
Map<String, String> map = new HashMap<>();
map.put("ad", "dd");
map.put("bc", "ee");
map.put("cb", "ff");
for (Map.Entry<String, String> entry : map.entrySet()) {
System.out.println(entry.getKey() + ":" + entry.getValue());
}
System.out.println();
Map<String, String> linkedHashMap = new LinkedHashMap<>();
// 默認(rèn)按照升序排列
map.entrySet().stream().sorted(Map.Entry.comparingByValue())
.forEach(o -> linkedHashMap.put(o.getKey(), o.getValue()));
for (Map.Entry<String, String> entry : linkedHashMap.entrySet()) {
System.out.println(entry.getKey() + ":" + entry.getValue());
}
System.out.println();
Map<String, String> linkedHashMap1 = new LinkedHashMap<>();
// 自定義排序(降序)
map.entrySet().stream().sorted(Map.Entry.comparingByValue(new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return o2.compareTo(o1);
}
})).forEach(o -> linkedHashMap1.put(o.getKey(), o.getValue()));
for (Map.Entry<String, String> entry : linkedHashMap1.entrySet()) {
System.out.println(entry.getKey() + ":" + entry.getValue());
}
}
}執(zhí)行結(jié)果
bc:ee
ad:dd
cb:ff
ad:dd
bc:ee
cb:ff
cb:ff
bc:ee
ad:dd
借助List進(jìn)行排序(按value升序/降序)
原理:將待排序Map中的所有元素置于一個列表中,接著使用Collections的一個靜態(tài)方法 sort(List<T> list, Comparator<? super T> c) 來排序列表,同樣是用比較器定義比較規(guī)則。排序后的列表中的元素再依次裝入Map,為了肯定的保證Map中元素與排序后的List中的元素的順序一致,使用了LinkedHashMap數(shù)據(jù)類型。
本處只寫升序代碼,降序只是調(diào)換個順序而已。
package org.example.a;
import java.util.*;
public class Demo {
public static void main(String[] args) {
Map<String, String> map = new HashMap<>();
map.put("ad", "dd");
map.put("bc", "ee");
map.put("cb", "ff");
for (Map.Entry<String, String> entry : map.entrySet()) {
System.out.println(entry.getKey() + ":" + entry.getValue());
}
System.out.println();
Map<String, String> sortedMap = new LinkedHashMap<>();
List<Map.Entry<String, String>> entryList = new ArrayList<Map.Entry<String, String>>(
map.entrySet());
Collections.sort(entryList, new Comparator<Map.Entry<String, String>>() {
@Override
public int compare(Map.Entry<String, String> me1, Map.Entry<String, String> me2) {
return me1.getValue().compareTo(me2.getValue());
}
});
for (Map.Entry<String, String> stringStringEntry : entryList) {
sortedMap.put(stringStringEntry.getKey(), stringStringEntry.getValue());
}
for (Map.Entry<String, String> entry : sortedMap.entrySet()) {
System.out.println(entry.getKey() + ":" + entry.getValue());
}
}
}運(yùn)行結(jié)果
bc:ee
ad:dd
cb:ff
ad:dd
bc:ee
cb: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<String, String> hashMap = new HashMap<String, String>();
hashMap.put("name1", "josan1");
hashMap.put("name2", "josan2");
hashMap.put("name3", "josan3");
Set<Map.Entry<String, String>> set = hashMap.entrySet();
Iterator<Map.Entry<String, String>> 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);
}
}
}執(zhí)行結(jié)果(未按照插入順序輸出)
key:name3, value:josan3
key:name2, value:josan2
key: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<String, String> hashMap = new LinkedHashMap<String, String>();
hashMap.put("name1", "josan1");
hashMap.put("name2", "josan2");
hashMap.put("name3", "josan3");
Set<Map.Entry<String, String>> set = hashMap.entrySet();
Iterator<Map.Entry<String, String>> 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);
}
}
}執(zhí)行結(jié)果(按照插入順序輸出)
key:name1, value:josan1
key:name2, value:josan2
key:name3, value:josan3
以上就是Java實(shí)現(xiàn)HashMap排序方法的示例詳解的詳細(xì)內(nèi)容,更多關(guān)于Java HashMap排序的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
SpringBoot實(shí)現(xiàn)熱部署的方式總結(jié)
所謂熱部署,就是在應(yīng)用正在運(yùn)行的時候升級軟件,卻不需要重新啟動應(yīng)用,對于Java來說,熱部署就是在運(yùn)行時更新Java類文件,本文將深入探討SpringBoot有哪些方式可以實(shí)現(xiàn)熱部署,感興趣的朋友可以小編一探討學(xué)習(xí)2023-06-06
java數(shù)據(jù)庫連接池和數(shù)據(jù)庫連接示例
這篇文章主要介紹了java數(shù)據(jù)庫連接池和數(shù)據(jù)庫連接示例,需要的朋友可以參考下2014-05-05
.NET Core使用SignalR實(shí)現(xiàn)實(shí)時通訊的示例代碼
SignalR是一個ASP.NETCore庫,用于在客戶端和服務(wù)器之間實(shí)現(xiàn)實(shí)時通訊,本文主要介紹了.NETCore中使用SignalR實(shí)現(xiàn)實(shí)時通訊,感興趣的可以了解一下2024-11-11
關(guān)于JwtToken使用-重點(diǎn)看一下過期時間
這篇文章主要介紹了關(guān)于JwtToken使用-重點(diǎn)看一下過期時間,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-07-07
Java基于棧方式解決漢諾塔問題實(shí)例【遞歸與非遞歸算法】

