作者mgtsai ()
看板java
标题Re: [问题] Hashmap以value排序
时间Fri Jan 8 17:30:44 2010
※ 引述《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)