按 Java 中的值对 HashMap 进行排序


众所周知,Java 中的哈希映射既不按键也不按顺序维护插入顺序。在向其中添加条目时,它也不会维护任何其他顺序。

现在,为了根据映射到其相应键的值对哈希映射进行排序,我们首先需要获取所有映射值,前提是该哈希映射仅具有唯一值。现在,将所有值放入一个列表并使用 Java 的比较器或可比较接口对其进行排序。

当我们获得已排序的唯一值列表后,现在可从映射中获取相应的键,并将值键对放入新的树映射中,从而再次根据值维护插入顺序。插入后,我们将遍历相同的树映射,该映射已排序,并成为我们最终的已排序映射。

示例

现场演示

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.TreeMap;
public class HashMapSortByValue {
   public static void main(String[] args) {
      HashMap<String, String> hMap = new HashMap<>();
      LinkedHashMap<String, String> sortedMap = new LinkedHashMap<>();
      ArrayList<String> list = new ArrayList<>();
      hMap.put("5", "Akshay");
      hMap.put("8", "Veer");
      hMap.put("3", "Guang");
      hMap.put("7", "Bakshi");
      hMap.put("2", "TomTom");
      hMap.put("10", "Chang");
      hMap.put("1", "Sandy");
      for (Map.Entry<String, String> entry : hMap.entrySet()) {
         list.add(entry.getValue());
      }
      Collections.sort(list, new Comparator<String>() {
         public int compare(String str, String str1) {
            return (str).compareTo(str1);
         }
      });
      for (String str : list) {
         for (Entry<String, String> entry : hMap.entrySet()) {
            if (entry.getValue().equals(str)) {
               sortedMap.put(entry.getKey(), str);
            }
         }
      }
      System.out.println(sortedMap);
   }
}

输出

{5 = Akshay, 7 = Bakshi, 10 = Chang, 3 = Guang, 1 = Sandy, 2 = TomTom, 8 = Veer}

更新于:2019-07-30

562 次浏览

开启您的 职业生涯

通过完成课程获得认证

开始学习
广告