按 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}
广告