Java 按降序或升序遍历哈希映射键的值?
我试图以降序或升序遍历哈希映射,但没有得到正确的输出 这是我的地图:Java 按降序或升序遍历哈希映射键的值?,java,arraylist,hashmap,Java,Arraylist,Hashmap,我试图以降序或升序遍历哈希映射,但没有得到正确的输出 这是我的地图: Hashmap<String Integer> hm= new Hashmap<String,Integer>(); 我正在尝试类似于: List<Integer> ValueList = new ArrayList<Integer>(hm.values()); ArrayList<String> keyList = new Arra
Hashmap<String Integer> hm= new Hashmap<String,Integer>();
我正在尝试类似于:
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
您可以将地图视为一组条目,其中每个条目都有一个键和一个值。因此,您需要的是一个已排序的条目列表。不能只对键或值进行排序,因为这样会丢失键和值之间的关联:
List<Map.Entry<String, Integer>> entries = new ArrayList<>(map.entrySet());
entries.sort(Comparator.comparing(Map.Entry::getValue));
List entries=newarraylist(map.entrySet());
entries.sort(Comparator.comparing(Map.Entry::getValue));
如果需要经常访问这些值,可以使用TreeMap
对象避免排序
这个特殊的映射
可以像普通的哈希映射
一样使用,其附加功能是,它将使用它们的可比
、等于
和哈希
方法(您必须覆盖
)
如果您定义自己的键类,则可以使其自动对值进行排序
如果不需要此性能提升,请提取值,然后使用集合对其进行排序。排序也很有效。我建议使用列表排序地图。以下是解决方案:
//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);
}
请发布您的代码。寻求调试帮助的问题(“为什么此代码不起作用?”)必须包括所需的行为、特定的问题或错误,以及在问题本身中复制它所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。请参阅:如何创建一个最小的、完整的和可验证的示例。我已经更新了我正在尝试的代码。您想根据数值对hashmap进行排序吗?可能是重复的
//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