猿问

按值排序HashMap

按值排序HashMap

我需要整理我的HashMap根据它中存储的值。这个HashMap包含存储在电话中的联系人名称。


此外,我需要在对值进行排序之后,键就会自动排序,或者您可以说键和值是绑定在一起的,因此值中的任何更改都应该反映在键中。


HashMap<Integer,String> map = new HashMap<Integer,String>();

map.put(1,"froyo");

map.put(2,"abby");

map.put(3,"denver");

map.put(4,"frost");

map.put(5,"daisy");

所需产出:


2,abby;

5,daisy;

3,denver;

4,frost;

1,froyo;


浮云间
浏览 250回答 3
3回答

RISEBY

假设使用Java,您可以像这样对hashmap进行排序:public&nbsp;LinkedHashMap<Integer,&nbsp;String>&nbsp;sortHashMapByValues( &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HashMap<Integer,&nbsp;String>&nbsp;passedMap)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;List<Integer>&nbsp;mapKeys&nbsp;=&nbsp;new&nbsp;ArrayList<>(passedMap.keySet()); &nbsp;&nbsp;&nbsp;&nbsp;List<String>&nbsp;mapValues&nbsp;=&nbsp;new&nbsp;ArrayList<>(passedMap.values()); &nbsp;&nbsp;&nbsp;&nbsp;Collections.sort(mapValues); &nbsp;&nbsp;&nbsp;&nbsp;Collections.sort(mapKeys); &nbsp;&nbsp;&nbsp;&nbsp;LinkedHashMap<Integer,&nbsp;String>&nbsp;sortedMap&nbsp;= &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;new&nbsp;LinkedHashMap<>(); &nbsp;&nbsp;&nbsp;&nbsp;Iterator<String>&nbsp;valueIt&nbsp;=&nbsp;mapValues.iterator(); &nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(valueIt.hasNext())&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;val&nbsp;=&nbsp;valueIt.next(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Iterator<Integer>&nbsp;keyIt&nbsp;=&nbsp;mapKeys.iterator(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(keyIt.hasNext())&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Integer&nbsp;key&nbsp;=&nbsp;keyIt.next(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;comp1&nbsp;=&nbsp;passedMap.get(key); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;comp2&nbsp;=&nbsp;val; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(comp1.equals(comp2))&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;keyIt.remove(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sortedMap.put(key,&nbsp;val); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;sortedMap;}只是个开场的例子。这种方法更有用,因为它对HashMap进行排序,并保留重复的值。

开满天机

试试下面的代码,它对我很好。您既可以选择升序,也可以选择降序import&nbsp;java.util.Collections;import&nbsp;java.util.Comparator;import&nbsp;java.util.HashMap;import&nbsp;java.util.LinkedHashMap;import&nbsp;java.util.LinkedList;import&nbsp;java.util.List;import&nbsp;java.util.Map;import&nbsp;java.util.Map.Entry;public&nbsp;class&nbsp;SortMapByValue{ &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;boolean&nbsp;ASC&nbsp;=&nbsp;true; &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;boolean&nbsp;DESC&nbsp;=&nbsp;false; &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;void&nbsp;main(String[]&nbsp;args) &nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Creating&nbsp;dummy&nbsp;unsorted&nbsp;map &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Map<String,&nbsp;Integer>&nbsp;unsortMap&nbsp;=&nbsp;new&nbsp;HashMap<String,&nbsp;Integer>(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsortMap.put("B",&nbsp;55); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsortMap.put("A",&nbsp;80); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsortMap.put("D",&nbsp;20); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsortMap.put("C",&nbsp;70); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("Before&nbsp;sorting......"); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printMap(unsortMap); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("After&nbsp;sorting&nbsp;ascending&nbsp;order......"); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Map<String,&nbsp;Integer>&nbsp;sortedMapAsc&nbsp;=&nbsp;sortByComparator(unsortMap,&nbsp;ASC); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printMap(sortedMapAsc); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("After&nbsp;sorting&nbsp;descindeng&nbsp;order......"); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Map<String,&nbsp;Integer>&nbsp;sortedMapDesc&nbsp;=&nbsp;sortByComparator(unsortMap,&nbsp;DESC); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printMap(sortedMapDesc); &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;static&nbsp;Map<String,&nbsp;Integer>&nbsp;sortByComparator(Map<String,&nbsp;Integer>&nbsp;unsortMap,&nbsp;final&nbsp;boolean&nbsp;order) &nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List<Entry<String,&nbsp;Integer>>&nbsp;list&nbsp;=&nbsp;new&nbsp;LinkedList<Entry<String,&nbsp;Integer>>(unsortMap.entrySet()); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Sorting&nbsp;the&nbsp;list&nbsp;based&nbsp;on&nbsp;values &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Collections.sort(list,&nbsp;new&nbsp;Comparator<Entry<String,&nbsp;Integer>>() &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;int&nbsp;compare(Entry<String,&nbsp;Integer>&nbsp;o1, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Entry<String,&nbsp;Integer>&nbsp;o2) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(order) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;o1.getValue().compareTo(o2.getValue()); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;o2.getValue().compareTo(o1.getValue()); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Maintaining&nbsp;insertion&nbsp;order&nbsp;with&nbsp;the&nbsp;help&nbsp;of&nbsp;LinkedList &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Map<String,&nbsp;Integer>&nbsp;sortedMap&nbsp;=&nbsp;new&nbsp;LinkedHashMap<String,&nbsp;Integer>(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(Entry<String,&nbsp;Integer>&nbsp;entry&nbsp;:&nbsp;list) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sortedMap.put(entry.getKey(),&nbsp;entry.getValue()); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;sortedMap; &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;void&nbsp;printMap(Map<String,&nbsp;Integer>&nbsp;map) &nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(Entry<String,&nbsp;Integer>&nbsp;entry&nbsp;:&nbsp;map.entrySet()) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("Key&nbsp;:&nbsp;"&nbsp;+&nbsp;entry.getKey()&nbsp;+&nbsp;"&nbsp;Value&nbsp;:&nbsp;"+&nbsp;entry.getValue()); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;}}编辑:第2版使用了新的java特性,如流等如果值相同,则按键对map进行排序。&nbsp;import&nbsp;java.util.*; &nbsp;import&nbsp;java.util.Map.Entry; &nbsp;import&nbsp;java.util.stream.Collectors; &nbsp;public&nbsp;class&nbsp;SortMapByValue &nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;static&nbsp;boolean&nbsp;ASC&nbsp;=&nbsp;true; &nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;static&nbsp;boolean&nbsp;DESC&nbsp;=&nbsp;false; &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;void&nbsp;main(String[]&nbsp;args) &nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Creating&nbsp;dummy&nbsp;unsorted&nbsp;map &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Map<String,&nbsp;Integer>&nbsp;unsortMap&nbsp;=&nbsp;new&nbsp;HashMap<>(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsortMap.put("B",&nbsp;55); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsortMap.put("A",&nbsp;20); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsortMap.put("D",&nbsp;20); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsortMap.put("C",&nbsp;70); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("Before&nbsp;sorting......"); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printMap(unsortMap); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("After&nbsp;sorting&nbsp;ascending&nbsp;order......"); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Map<String,&nbsp;Integer>&nbsp;sortedMapAsc&nbsp;=&nbsp;sortByValue(unsortMap,&nbsp;ASC); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printMap(sortedMapAsc); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("After&nbsp;sorting&nbsp;descending&nbsp;order......"); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Map<String,&nbsp;Integer>&nbsp;sortedMapDesc&nbsp;=&nbsp;sortByValue(unsortMap,&nbsp;DESC); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printMap(sortedMapDesc); &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;static&nbsp;Map<String,&nbsp;Integer>&nbsp;sortByValue(Map<String,&nbsp;Integer>&nbsp;unsortMap,&nbsp;final&nbsp;boolean&nbsp;order) &nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List<Entry<String,&nbsp;Integer>>&nbsp;list&nbsp;=&nbsp;new&nbsp;LinkedList<>(unsortMap.entrySet()); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Sorting&nbsp;the&nbsp;list&nbsp;based&nbsp;on&nbsp;values &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;list.sort((o1,&nbsp;o2)&nbsp;->&nbsp;order&nbsp;?&nbsp;o1.getValue().compareTo(o2.getValue())&nbsp;==&nbsp;0 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;?&nbsp;o1.getKey().compareTo(o2.getKey()) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;o1.getValue().compareTo(o2.getValue())&nbsp;:&nbsp;o2.getValue().compareTo(o1.getValue())&nbsp;==&nbsp;0 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;?&nbsp;o2.getKey().compareTo(o1.getKey()) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;o2.getValue().compareTo(o1.getValue())); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;list.stream().collect(Collectors.toMap(Entry::getKey,&nbsp;Entry::getValue,&nbsp;(a,&nbsp;b)&nbsp;->&nbsp;b,&nbsp;LinkedHashMap::new)); &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;static&nbsp;void&nbsp;printMap(Map<String,&nbsp;Integer>&nbsp;map) &nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;map.forEach((key,&nbsp;value)&nbsp;->&nbsp;System.out.println("Key&nbsp;:&nbsp;"&nbsp;+&nbsp;key&nbsp;+&nbsp;"&nbsp;Value&nbsp;:&nbsp;"&nbsp;+&nbsp;value)); &nbsp;&nbsp;&nbsp;&nbsp;}}

繁星点点滴滴

在Java 8中:Map<Integer,&nbsp;String>&nbsp;sortedMap&nbsp;=&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsortedMap.entrySet().stream() &nbsp;&nbsp;&nbsp;&nbsp;.sorted(Entry.comparingByValue()) &nbsp;&nbsp;&nbsp;&nbsp;.collect(Collectors.toMap(Entry::getKey,&nbsp;Entry::getValue, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(e1,&nbsp;e2)&nbsp;->&nbsp;e1,&nbsp;LinkedHashMap::new));
随时随地看视频慕课网APP

相关分类

Java
我要回答