我试图按递减顺序或递增顺序遍历Hash地图,但我没有得到正确的输出。
这是我的地图:
Hashmap<String Integer> hm= new Hashmap<String,Integer>();
以下是我的价值观:
Key Value
Hi 4
kumar 1
Hello 1
vivek 3
我正在尝试类似的事情:
List<Integer> ValueList = new ArrayList<Integer>(hm.values());
ArrayList<String> keyList = new ArrayList<String>(hm.keySet());
Collections.sort(ValueList);
Collections.reverse(keyList);
Collections.reverse(ValueList);
我希望这样:
Key Value
kumar 1
Hello 1
vivek 3
Hi 4
答案 0 :(得分:1)
我建议使用Apache Commons Collections ListOrderedMap
。这是解决方案:
//Populate the map
Map<String, Integer> map = new HashMap<>();
map.put("Hi", 4);
map.put("kumar", 1);
map.put("Hello", 1);
map.put("vivek", 3);
//Sort the values
List<Integer> values = new ArrayList<Integer>(map.values());
Collections.sort(values);
int size = values.size();
Set<Entry<String, Integer>> entries = map.entrySet();
//Create a new ordered map
ListOrderedMap<String, Integer> orderedMap;
orderedMap = ListOrderedMap.listOrderedMap(new HashMap<String, Integer>(map));
for (int i = 0; i < size; i++) {
Integer value = values.get(i);
Iterator<Entry<String, Integer>> iter = entries.iterator();
while (iter.hasNext()) {
Entry<String, Integer> entry = iter.next();
if (value.equals(entry.getValue())) {
//Put all values at index i that match the value
orderedMap.put(i, entry.getKey(), value);
}
}
}
//Print the orderedMap key/value pairs
entries = orderedMap.entrySet();
for (Entry<String, Integer> entry : entries) {
final String key = entry.getKey();
final Integer value = entry.getValue();
System.out.println("key = " + key + ", value = " + value);
}
输出:
key = Hello, value = 1
key = kumar, value = 1
key = vivek, value = 3
key = Hi, value = 4
答案 1 :(得分:0)
您可以将地图视为一组条目,其中每个条目都有一个键和一个值。所以你想要的是一个排序的条目列表。您不能只对键或值进行排序,因为您将丢失键和值之间的关联:
List<Map.Entry<String, Integer>> entries = new ArrayList<>(map.entrySet());
entries.sort(Comparator.comparing(Map.Entry::getValue));
答案 2 :(得分:0)
如果您需要经常访问这些值,可以使用TreeMap
对象来避免排序。
http://docs.oracle.com/javase/8/docs/api/java/util/TreeMap.html
这个特殊的Map
可以像普通的HashMap
一样使用其附加功能,它会使用Comparable
,Equals
和{{1}自动对键进行排序方法(你必须Hash
)
如果您定义了自己的密钥类,则可以使其自动对值进行排序。
如果您不需要此性能提升,则提取值然后使用override
对其进行排序也很有效。