我的HashTable中有以下键值对。
KEY : VALUES
12345:45;
23456:23;
23445:34;
12367:101;
Output should be:
12367:101;
12345:45;
23445:34;
23456:23;
即。输出按值的降序排列。
ht_sort是包含键值对的哈希表。
//get the values from the hashtable as array objects.
Object[] arytf= ht_sort.values().toArray();
//Sort the array objects.
Arrays.sort(arytf);
但问题是我无法将这些排序值链接回哈希以获取密钥。
我不确定如何做到这一点,我已经检查过以前的线程,但无法从中做出任何结果。寻求帮助。
感谢。
答案 0 :(得分:2)
您可以在哈希表中对条目进行排序,使用Comparator<Map.Entry<...>>
的自定义实现来比较这些值。然后你就会有一个排序的条目数组,你可以随便迭代它们,随时选择键和值。
编辑:如上所述,Map.Entry
值有些短暂 - 因此您可能想要创建一对来收集这两个值。 (如果您正在处理非泛型类型,则始终可以创建Object[2]
以将键存储在索引0中,将值存储在索引1中...)在迭代时复制条目,然后 对结果数组进行排序。
答案 1 :(得分:1)
对数组进行排序后,遍历它并调用_yourHash.get(arytf [n])
答案 2 :(得分:1)
编辑: 重复值限额解决方案:
List<Map.Entry<Integer, Integer>> sortMapValues2(Map<Integer, Integer> map){
//Sort Map.Entry by value
List<Map.Entry<Integer, Integer>> result = new ArrayList(map.entrySet());
Collections.sort(result, new Comparator<Map.Entry<Integer, Integer>>(){
public int compare(Entry<Integer, Integer> o1, Entry<Integer, Integer> o2) {
return o2.getValue() - o1.getValue();
}});
return result;
}
你可以通过google“java collections framework”获得大量文章。
答案 3 :(得分:0)
如果您只想存储已排序的键/值对,可以查看LinkedHashMap:
http://download.oracle.com/javase/6/docs/api/java/util/LinkedHashMap.html
我的解决方案是对Entry数组进行排序(例如,使用自定义Comparator),然后以正确的顺序将它们插入到LinkedHashMap中。
答案 4 :(得分:-1)