Java中如何按键和值对HashMap进行排序
时间:2020-02-23 14:34:23 来源:igfitidea点击:
HashMap不保留元素的顺序,但如果要按键或者值对其进行排序。
在本教程中,我们将看到如何按键或者值对HashMap进行排序。
按键排序:
使用Treemap可以轻松完成按键排序。
我们只需将HashMap传递给Treemap的构造函数。
TreeMap map=new TreeMap(Map hm);
按值排序:
我们可以使用比较器按值对其进行排序。
按键排序示例:
创建Country.java如下。
它应该实现可比较的接口
package org.igi.theitroad; public class Country implements Comparable { String name; long population; public Country(String name, long population) { super(); this.name = name; this.population = population; } public String getName() { return name; } public void setName(String name) { this.name = name; } public long getPopulation() { return population; } public void setPopulation(long population) { this.population = population; } @Override public int compareTo(Object o) { Country country=(Country) o; return this.getName().compareTo(country.getName()); } }
创建TReeMAPCOMPMAIN.java如下:
package org.igi.theitroad; import java.util.HashMap; import java.util.Iterator; import java.util.TreeMap; public class TreeMapCompMain { public static void main(String[] args) { Country Netherlands=new Country("Netherlands",1000); Country japan=new Country("Japan",10000); Country france=new Country("France",2000); Country russia=new Country("Russia",20000); HashMap<Country, String> countryCapitalMap=new HashMap<Country,String>(); countryCapitalMap.put(Netherlands,"Delhi"); countryCapitalMap.put(japan,"Tokyo"); countryCapitalMap.put(france,"Paris"); countryCapitalMap.put(russia,"Moscow"); System.out.println("Sorting HashMap by passing it to TreeMap constructor"); TreeMap<Country,String> sortedTreeMapCountryCapital=new TreeMap<Country,String> (countryCapitalMap); Iterator countryCapitalIter=sortedTreeMapCountryCapital.keySet().iterator();//put debug point at this line while(countryCapitalIter.hasNext()) { Country countryObj=countryCapitalIter.next(); String capital=countryCapitalMap.get(countryObj); System.out.println(countryObj.getName()+"----"+capital); } } }
运行程序时,我们将得到以下输出:
Sorting HashMap by passing it to TreeMap constructor France----Paris Netherlands----Delhi Japan----Tokyo Russia----Moscow
按值排序示例:
其中我们将按值对HashMap进行排序。
其中我正在拍摄hashmap <string,string>以使示例更简单。
例子:
package org.igi.theitroad; import java.util.Collections; import java.util.Comparator; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.ArrayList; import java.util.List; import java.util.Map.Entry; import java.util.Set; public class HashMapMain { public static void main(String args[]) { //HashMap with Country name as key and capital as value //HashMap stores elements in key value pairs HashMap<String, String> countryCapitalMap = new HashMap<String, String>(); countryCapitalMap.put("Japan", "Tokyo"); countryCapitalMap.put("France", "Paris"); countryCapitalMap.put("Russia", "Moscow"); countryCapitalMap.put("Netherlands", "Delhi"); System.out.println("-----------------------------"); //Iterating HashMap Using keySet() and for each loop System.out.println("Before Sorting"); System.out.println("-----------------------------"); for (String countryKey : countryCapitalMap.keySet()) { System.out.println("Country:" + countryKey + " and Capital:" + countryCapitalMap.get(countryKey)); } Set<Entry<String, String>> countryCapitalEntrySet=countryCapitalMap.entrySet(); List<Entry<String, String>> entryList=new ArrayList<Entry<String, String>>(countryCapitalEntrySet); Collections.sort(entryList,new Comparator<Entry<String,String>>() { @Override public int compare(Entry<String,String> o1, Entry<String,String> o2) { return o1.getValue().compareTo(o2.getValue()); } }); System.out.println("-----------------------------"); //Using LinkedHashMop to keep entries in sorted order LinkedHashMap<String,String> sortedHashMap=new LinkedHashMap<String,String>(); for (Entry<String,String> entry:entryList) { sortedHashMap.put(entry.getKey(), entry.getValue()); } System.out.println("After Sorting"); System.out.println("-----------------------------"); //Iterating sortedHashMap Using keySet() and for each loop for (String countryKey : sortedHashMap.keySet()) { System.out.println("Country:" + countryKey + " and Capital:" + sortedHashMap.get(countryKey)); } } }
运行上面的程序时,我们将得到以下输出
---------------------------- Before Sorting ---------------------------- Country:France and Capital:Paris Country:Russia and Capital:Moscow Country:Japan and Capital:Tokyo Country:Netherlands and Capital:Delhi ---------------------------- After Sorting ---------------------------- Country:Netherlands and Capital:Delhi Country:Russia and Capital:Moscow Country:France and Capital:Paris Country:Japan and Capital:Tokyo