Java小知識-----Map 按Key排序和按Value排序

Map排序的方式有很多種,這里記錄下自己總結的兩種比較常用的方式:按鍵排序(sort by key), 按值排序(sort by value)。

1、按鍵排序

jdk內置的java.util包下的TreeMap<K,V>既可滿足此類需求,向其構造方法?TreeMap(Comparator<? super K> comparator) ?傳入我們自定義的比較器即可實現按鍵排序。

代碼:

 1 public class MapSortDemo {
 2 
 3     public static void main(String[] args) {
 4 
 5         Map<String, String> map = new TreeMap<String, String>();
 6 
 7         map.put("KFC", "kfc");
 8         map.put("WNBA", "wnba");
 9         map.put("NBA", "nba");
10         map.put("CBA", "cba");
11 
12         Map<String, String> resultMap = sortMapByKey(map);    //按Key進行排序
13 
14         for (Map.Entry<String, String> entry : resultMap.entrySet()) {
15             System.out.println(entry.getKey() + " " + entry.getValue());
16         }
17     }
18     
19     /**
20      * 使用 Map按key進行排序
21      * @param map
22      * @return
23      */
24     public static Map<String, String> sortMapByKey(Map<String, String> map) {
25         if (map == null || map.isEmpty()) {
26             return null;
27         }
28 
29         Map<String, String> sortMap = new TreeMap<String, String>(
30                 new MapKeyComparator());
31 
32         sortMap.putAll(map);
33 
34         return sortMap;
35     }
36 }
37 
38 
39 比較器類
40 
41 class MapKeyComparator implements Comparator<String>{
42 
43     @Override
44     public int compare(String str1, String str2) {
45         
46         return str1.compareTo(str2);
47     }
48 }

2、按值排序

原理:將待排序Map中的所有元素置于一個列表中,接著使用Collections的一個靜態方法 sort(List<T> list, Comparator<? super T> c)?
來排序列表,同樣是用比較器定義比較規則。排序后的列表中的元素再依次裝入Map,為了肯定的保證Map中元素與排序后的List中的元素的順序一致,使用了LinkedHashMap數據類型。

public class MapSortDemo {public static void main(String[] args) {Map<String, String> map = new TreeMap<String, String>();map.put("KFC", "kfc");map.put("WNBA", "wnba");map.put("NBA", "nba");map.put("CBA", "cba");Map<String, String> resultMap = sortMapByKey(map);    //按Key進行排序
//        Map<String, String> resultMap = sortMapByValue(map); //按Value進行排序for (Map.Entry<String, String> entry : resultMap.entrySet()) {System.out.println(entry.getKey() + " " + entry.getValue());}}/*** 使用 Map按value進行排序* @param map* @return*/public static Map<String, String> sortMapByValue(Map<String, String> oriMap) {if (oriMap == null || oriMap.isEmpty()) {return null;}Map<String, String> sortedMap = new LinkedHashMap<String, String>();List<Map.Entry<String, String>> entryList = new ArrayList<Map.Entry<String, String>>(oriMap.entrySet());Collections.sort(entryList, new MapValueComparator());Iterator<Map.Entry<String, String>> iter = entryList.iterator();Map.Entry<String, String> tmpEntry = null;while (iter.hasNext()) {tmpEntry = iter.next();sortedMap.put(tmpEntry.getKey(), tmpEntry.getValue());}return sortedMap;}
}
復制代碼

比較器類

復制代碼
class MapValueComparator implements Comparator<Map.Entry<String, String>> {@Overridepublic int compare(Entry<String, String> me1, Entry<String, String> me2) {return me1.getValue().compareTo(me2.getValue());}
}

?

原作者鏈接:https://www.cnblogs.com/zhujiabin/p/6164826.html

?

轉載于:https://www.cnblogs.com/charles8866/p/10972041.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/393410.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/393410.shtml
英文地址,請注明出處:http://en.pswp.cn/news/393410.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

社區帖子全文搜索實戰(基于ElasticSearch)

要為社區APP的帖子提供全文搜索的功能&#xff0c;考察使用ElasticSearch實現此功能。 ES的安裝不再描述。 es集成中文分詞器(根據es版本選擇對應的插件版本)下載源碼&#xff1a;https://github.com/medcl/elasticsearch-analysis-ik  maven編譯得到&#xff1a;elasticsear…

Microsoft Deployment Toolkit 2010 新功能實戰之一

續Microsoft Deployment Toolkit 2010 Beta 2先睹為快&#xff01;下面將通過使用Microsoft Deployment Toolkit 2010來部署Windows 7來介紹它的新功能的具體操作。有些概念的理解和操作方法參見MDT2008部署之一概覽。 一、實驗環境操作全部在VMware Workstation的虛擬操作環境…

leetcode1482. 制作 m 束花所需的最少天數(二分法)

給你一個整數數組 bloomDay&#xff0c;以及兩個整數 m 和 k 。 現需要制作 m 束花。制作花束時&#xff0c;需要使用花園中 相鄰的 k 朵花 。 花園中有 n 朵花&#xff0c;第 i 朵花會在 bloomDay[i] 時盛開&#xff0c;恰好 可以用于 一束 花中。 請你返回從花園中摘 m 束…

sublime 消除鋸齒_如何在Sublime中消除麻煩

sublime 消除鋸齒by Abdul Kadir通過阿卜杜勒卡迪爾(Abdul Kadir) 如何在Sublime中消除麻煩 (How to lint away your troubles in Sublime) Sublime is a lightweight text editor and is quite popular among many web developers. Now I know there are many sophisticated …

node.js mysql防注入_避免Node.js中的命令行注入安全漏洞

在這篇文章中&#xff0c;我們將學習正確使用Node.js調用系統命令的方法&#xff0c;以避免常見的命令行注入漏洞。我們經常使用的調用命令的方法是最簡單的child_process.exec。它有很一個簡單的使用模式;通過傳入一段字符串命令&#xff0c;并把一個錯誤或命令處理結果回傳至…

Netbackup detected IBM drives as unusable

今天在遠程給客戶安裝NBU的時候&#xff0c;遇到了下面這個問題&#xff0c;下面的內容來至于SYMANTEC。 1&#xff0c;更新mapping文件 在原來也遇到過類型的故障&#xff0c;通過更新mapping文件后&#xff0c;故障解決&#xff0c;這次沒有那么幸運了。 2&#xff0c;lsscsi…

opencv python運動人體檢測

采用非極大值抑制&#xff0c;將重疊的框合并成一個。 # import the necessary packages from imutils.object_detection import non_max_suppression import numpy as np import imutils import cv2# initialize the HOG descriptor/person detector hog cv2.HOGDescriptor()…

php mysql 注入一句話木馬_滲透技術--SQL注入寫一句話木馬原理

講一下SQL注入中寫一句話拿webshell的原理&#xff0c;主要使用的是 SELECT ... INTO OUTFILE 這個語句&#xff0c;下面是一個語句的例子:SELECT * INTO OUTFILE C:\log1.txt這樣就可以把查詢到的數據寫入到C盤的log1.txt這個文件里面。利用這個原理我們可以把PHP的一句話木馬…

開源貢獻 計算_使用此網站為開源做貢獻

開源貢獻 計算When I began the transition into being a software developer, I knew that contributing to open source projects would greatly assist my job search.當我開始過渡為軟件開發人員時&#xff0c;我知道為開源項目做貢獻將極大地幫助我的求職。 So, I jumped…

leetcode275. H指數 II(二分法)

給定一位研究者論文被引用次數的數組&#xff08;被引用次數是非負整數&#xff09;&#xff0c;數組已經按照升序排列。編寫一個方法&#xff0c;計算出研究者的 h 指數。 h 指數的定義: “h 代表“高引用次數”&#xff08;high citations&#xff09;&#xff0c;一名科研人…

java 多線程阻塞隊列 與 阻塞方法與和非阻塞方法

Queue是什么隊列&#xff0c;是一種數據結構。除了優先級隊列和LIFO隊列外&#xff0c;隊列都是以FIFO&#xff08;先進先出&#xff09;的方式對各個元素進行排序的。無論使用哪種排序方式&#xff0c;隊列的頭都是調用remove()或poll()移除元素的。在FIFO隊列中&#xff0c;所…

批量移動AD用戶到指定OU

作為域管理員&#xff0c;在日常工作中使用ADUC&#xff08;AD用戶和計算機&#xff09;工具在圖形界面中進行賬號管理操作可謂是家常便飯了。然而一個個增加、移動、刪除用戶&#xff0c;這樣操作有時真的夠煩&#xff0c;當管理大批量的賬戶時&#xff0c;重復操作浪費的時間…

vs 編譯說明

靜態編譯/MT&#xff0c;/MTD 是指使用libc和msvc相關的靜態庫(lib)。動態編譯&#xff0c;/MD&#xff0c;/MDd是指用相應的DLL版本編譯。其中字母含義 d&#xff1a;debug m&#xff1a;multi-threading(多線程) t&#xff1a;text代碼 d&#xff1a;dynamic(動態)…

python numeric_Python pandas.to_numeric函數方法的使用

pandas.to_numeric(arg, errorsraise, downcastNone) [source]將參數轉換為數字類型。默認返回dtype為float64或int64&#xff0c; 具體取決于提供的數據。使用downcast參數獲取其他dtype。請注意&#xff0c;如果傳入非常大的數字&#xff0c;則可能會導致精度損失。由…

javascript 分號_讓我們談談JavaScript中的分號

javascript 分號要使用它們&#xff0c;還是不使用它們… (To use them, or not to use them…) Semicolons in JavaScript divide the community. Some prefer to use them always, no matter what. Others like to avoid them.JavaScript中的分號分隔社區。 有些人更喜歡始終…

leetcode436. 尋找右區間(二分法)

給定一組區間&#xff0c;對于每一個區間 i&#xff0c;檢查是否存在一個區間 j&#xff0c;它的起始點大于或等于區間 i 的終點&#xff0c;這可以稱為 j 在 i 的“右側”。 對于任何區間&#xff0c;你需要存儲的滿足條件的區間 j 的最小索引&#xff0c;這意味著區間 j 有最…

python篇第6天【數據類型】

Python有五個標準的數據類型&#xff1a;Numbers&#xff08;數字&#xff09;String&#xff08;字符串&#xff09;List&#xff08;列表&#xff09;Tuple&#xff08;元組&#xff09;Dictionary&#xff08;字典&#xff09;Python數字數字數據類型用于存儲數值。他們是不…

如何確定Ionic是否適合您的項目

by Simon Grimm西蒙格里姆(Simon Grimm) 如何確定Ionic是否適合您的項目 (How to find out if Ionic is the right choice for your project) Ionic has been around for quite some years. With the latest release of version 4, it has become an even better option for d…

二維數組的查找 java_查找二維數組java的總和

我正在一個項目中&#xff0c;我必須讀取文件并將內容輸入2D數組。然后&#xff0c;我必須對每一行&#xff0c;每一列和矩陣的周長求和。到目前為止&#xff0c;除外圍功能外&#xff0c;我一切正常。我正在嘗試為兩個外部列的頂行&#xff0c;底行和中間創建單獨的for循環。矩…

遞歸法解決兔子問題

記得以前過相似問題&#xff0c;今天有同事問道&#xff0c;竟然不知所答&#xff0c;故寫篇文章以記之。 一般而言&#xff0c;兔子在出生兩個月后&#xff0c;就有繁殖能力&#xff0c;一對兔子每個月能生出一對小兔子來。如果所有兔子都不死&#xff0c;那么若干月以后可以繁…