Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 按降序或升序遍历哈希映射键的值?_Java_Arraylist_Hashmap - Fatal编程技术网

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