Java實(shí)現(xiàn)HashMap排序方法的示例詳解
簡(jiǎn)介
本文用示例介紹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中的所有元素置于一個(gè)列表中,接著使用Collections的一個(gè)靜態(tài)方法 sort(List<T> list, Comparator<? super T> c) 來(lái)排序列表,同樣是用比較器定義比較規(guī)則。排序后的列表中的元素再依次裝入Map,為了肯定的保證Map中元素與排序后的List中的元素的順序一致,使用了LinkedHashMap數(shù)據(jù)類型。
本處只寫升序代碼,降序只是調(diào)換個(gè)順序而已。
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會(huì)按照插入順序存放
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排序的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
多個(gè)sheet Excel 數(shù)據(jù)導(dǎo)入數(shù)據(jù)庫(kù)的實(shí)現(xiàn)方法
這篇文章主要介紹了多個(gè)sheet Excel 數(shù)據(jù)導(dǎo)入數(shù)據(jù)庫(kù)的實(shí)現(xiàn)方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-03-03一篇文章告訴你如何在Java數(shù)組中插入一個(gè)字符
本篇文章主要介紹了Java數(shù)組中插入一個(gè)字符的相關(guān)方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助2021-10-10Java編程中的性能優(yōu)化如何實(shí)現(xiàn)
這篇文章主要介紹了Java編程中的性能優(yōu)化如何實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-10-10在Java項(xiàng)目中實(shí)現(xiàn)日志輸出的技巧分享
日志是開發(fā)過(guò)程中不可或缺的一部分,它可以幫助我們追蹤代碼的執(zhí)行過(guò)程、排查問題以及監(jiān)控系統(tǒng)運(yùn)行狀況,然而,大多數(shù)開發(fā)人員在編寫日志時(shí)往往只關(guān)注于輸出必要的信息,而忽略了日志的可讀性和美觀性,本文將介紹如何在Java項(xiàng)目中實(shí)現(xiàn)漂亮的日志輸出2023-10-10Spring Security實(shí)現(xiàn)不同接口安全策略方法詳解
這篇文章主要介紹了Spring Security實(shí)現(xiàn)不同接口安全策略方法詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-09-09@RequestParam?和@RequestBody注解的區(qū)別解析
在 Spring MVC 中,我們可以使用 @RequestParam 和 @RequestBody 來(lái)獲取請(qǐng)求參數(shù),但它們?cè)谟梅ê妥饔蒙嫌幸恍﹨^(qū)別,這篇文章主要介紹了@RequestParam?和@RequestBody注解的區(qū)別,需要的朋友可以參考下2023-06-06SpringCloud使用Feign實(shí)現(xiàn)動(dòng)態(tài)路由操作
這篇文章主要介紹了SpringCloud使用Feign實(shí)現(xiàn)動(dòng)態(tài)路由操作,文章圍繞主題展開詳細(xì)的內(nèi)容介紹具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-06-06