Re: [問題] Hashmap以value排序

看板java作者時間16年前 (2010/01/08 17:30), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串3/3 (看更多)
※ 引述《vencees ()》之銘言: : Hashmap<String, Integer> map = new HashMap<String, Integer>(); : 假設裡面已經有資料的話 : 要如何以value值排序...? : 如果用map.values()把值的collection拿出來,再做排序 第一,使用 map.values() 後,若要另外排序 那就再使用另一個 collection 即可 例如 new TreeSet<Integer>(map.values()); 就可以幫你把 map.values() 排好好的 因為你開了另一個 TreeSet 物件,所以就與原本的 HashMap 物件無關 * * * * * * * * * * 如果你除了原本 value 排序的需求之外,還要知道這個 value 所對應的 key 為何 那麼,你可以使用: TreeMap<Integer, String> sortedValueToKeyMap = new TreeMap<Integer, String>(); for (Map.Entry<String, Integer> entry: map.entrySet()) sortedValueToKeyMap.put(entry.value(), entry.key()); 這個 sortedValueToKeyMap 就是你所需要的 但是,若原本的 map.values() 有重覆的 Integer 那麼有些 key-value pair 會消失不見 (i.e. 原本的 map 中,有 "key1" -> 1 及 "key2" -> 1 但因為 1 重覆,所以 sortedValueToKeyMap 可能只剩下 1 -> "key2") 如果要把重覆 value 的 pair 都全部抓出來, 那麼,要自己寫一個 Comparable class 來定義 key-value pair 的大小順序 那這就是後話了 : 不會把<key, value>的對應弄亂嗎...? : 如果會弄亂的話該怎麼做? : --- : google完之後還是不甚了解,所以跑上來問...懇請指教。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 60.250.129.52 ※ 編輯: mgtsai 來自: 60.250.129.52 (01/08 17:43)
文章代碼(AID): #1BHlj7Ix (java)
文章代碼(AID): #1BHlj7Ix (java)