当前位置: 首页 > 科技观察

Java面试题:如何对HashMap键值进行排序

时间:2023-03-12 06:52:27 科技观察

Java中的HashMap是一种用于存储“键”和“值”信息对的数据结构。与Array、ArrayList和LinkedLists不同,它不维护插入元素的顺序。因此,如果您不知道如何解决,那么根据键或值对HashMap进行排序是一个很难的面试问题。让我们看看如何解决这个问题。1、HashMap将每一对key和value存储为一个Entry对象。例如,给定一个HashMap,MapaMap=newHashMap();每插入一个key,就会有一个value对应hashmap,生成一个Entry对象。通过使用这个Entry对象,我们可以根据值对HashMap进行排序。2.创建一个简单的HashMap,并插入一些键和值。apaMap=newHashMap();//添加keys和valuesaMap.put("五",5);aMap.put("七",7);aMap.put("八",8);aMap.put("一",1);aMap.put("二",2);aMap.put("三",3);3.从HashMap中恢复条目集合,如下所示。Set>mapEntries=aMap.entrySet();4.从上面的mapEntries创建一个LinkedList。我们将对这个链表进行排序,解决顺序问题。我们要为此目的使用链表的原因是因为在链表中插入元素比数组列表更快。List>aList=newLinkedList>(mapEntries);5.使用Collections.sort()方法通过传递链表和自定义比较器来对链表进行排序。Collections.sort(aList,newComparator>(){@Overridepublicintcompare(Entryele1,Entryele2){returnele1.getValue().compareTo(ele2.getValue());}});6.使用自定义比较器根据条目值(Entry.getValue())对链表进行排序。7.ele1.getValue().compareTo(ele2.getValue())——比较这两个值,返回0——如果两个值完全相同;返回1——如果第一个值大于第二个值;返回-1-如果第一个值小于第二个值。8.Collections.sort()是一种仅对值列表进行排序的内置方法。它在Collections类中重载。这两个方法分别是publicstatic>voidsort(Listlist)publicstaticvoidsort(Listlist,Comparatorc)9.现在你已经对链表进行了排序,我们需要将键和值信息对存储在新的映射中。由于HashMap不维护顺序,我们将使用LinkedHashMap。//将列表存储到LinkedHashMap中以保留finsertion.MapaMap2=newLinkedHashMap();for(Entryentry:aList){aMap2.put(entry.getKey(),entry.getValue());}10.完整代码如下。packagecom.speakingcs.maps;importjava.util.Collections;importjava.util.Comparator;importjava.util.HashMap;importjava.util.LinkedHashMap;importjava.util.LinkedList;importjava.util.List;importjava.util.Map;importjava。util.Map.Entry;importjava.util.Set;publicclassSortMapByValues{publicstaticvoidmain(String[]args){MapaMap=newHashMap();//添加keys和valuesaMap.put("Five",5);aMap.put("七",7);aMap.put("八",8);aMap.put("一",1);aMap.put("二",2);aMap.put("三",3);sortMapByValues(aMap);}privatestaticvoidsortMapByValues(MapaMap){Set>mapEntries=aMap.entrySet();System.out.println("ValuesandKeysbeforesorting");for(Entryentry:mapEntries){System.out.println(entry.getValue()+"-"+entry.getKey());}//使用链表排序,因为链表中插入元素tisfasterthananarraylist.List>aList=newLinkedList>(mapEntries);//对ListCollections.sort(aList,newComparator>(){@Overridepublicintcompare(Entryele1,Entryele2){returnele1.getValue().compareTo(ele2.getValue());}});//将list存入LinkedHashMap以保留插入顺序.MapaMap2=newLinkedHashMap();for(Entryentry:aList){aMap2.put(entry.getKey(),entry.getValue());}//打印值aftersoringofmapSystem.out.println("Value"+"-"+"Key");for(Entryentry:aMap2.entrySet()){System.out.println(entry.getValue()+"-"+entry.getKey());}}}译文链接:http://www.codeceo.com/article/java-hashmap-value-sort.html英文原文:HowtoSortHashMapBasedonValuesinJava