本文概述
- 按键对HashMap排序
- 使用比较器接口按值对HashMap进行排序
- 按键对HashMap排序
- 按值对HashMap排序
- 通过使用TreeMap
- 通过使用LinkedHashMap
当我们使用LinkedHashMap时, 我们需要获取Key set。将Set转换为List, 对列表进行排序, 然后以相同顺序将排序后的列表添加到LinkedHashMap中。我们在示例“按值对HashMap进行排序”中完成的相同过程。
按键对HashMap排序的示例
在下面的示例中, 我们使用TreeMap构造函数对元素进行排序, 并将HashMap类的对象作为参数传递。这是按键对HashMap排序的最简单方法。
import java.util.Map;
import java.util.HashMap;
import java.util.TreeMap;
import java.util.Iterator;
public class SortHashMapByKeys{public static void main(String args[]){//implementation of HashMapHashMap<
Integer, String>
hm=new HashMap<
Integer, String>
();
//addding keys and values to HashMaphm.put(23, "Yash");
hm.put(17, "Arun");
hm.put(15, "Swarit");
hm.put(9, "Neelesh");
Iterator <
Integer>
it = hm.keySet().iterator();
System.out.println("Before Sorting");
while(it.hasNext()){int key=(int)it.next();
System.out.println("Roll no:"+key+"name:"+hm.get(key));
}System.out.println("\n");
Map<
Integer, String>
map=new HashMap<
Integer, String>
();
System.out.println("After Sorting");
//using TreeMap constructor to sort the HashMapTreeMap<
Integer, String>
tm=newTreeMap<
Integer, String>
(hm);
Iterator itr=tm.keySet().iterator();
while(itr.hasNext()){int key=(int)itr.next();
System.out.println("Roll no:"+key+"name:"+hm.get(key));
}}}
【如何在Java中对HashMap进行排序】输出:
Before SortingRoll no:17name:ArunRoll no:23name:YashRoll no:9name:NeeleshRoll no:15name:SwaritAfter SortingRoll no:9name:NeeleshRoll no:15name:SwaritRoll no:17name:ArunRoll no:23name:Yash
使用比较器接口按值对HashMap进行排序在Java中, 按值对HashMap进行排序很复杂, 因为没有可用的直接方法。要按值对HashMap进行排序, 我们需要创建一个Comparator。它根据值比较两个元素。
之后, 从Map中获取元素集并将Set转换为List。使用Collections.sort(List)方法通过传递自定义比较器, 按值对元素列表进行排序。现在创建一个新的LinkedHashMap并将已排序的元素复制到其中。由于LinkedHashMap保证了映射的插入顺序。我们得到一个HashMap, 其值按排序顺序。
按“键”和“值”对HashMap进行排序之间有一个细微的区别, 即它可以具有重复的值, 但不能具有重复的键。我们无法使用TreeMap对值进行排序, 因为TreeMap通过键对元素进行排序。
按值对HashMap排序的示例
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Set;
public class SortHashMapValue {public static void main(String[] args) {//implementing HashMapHashMap<
Integer, String>
hm = new HashMap<
Integer, String>
();
hm.put(6, "Tushar");
hm.put(12, "Ashu");
hm.put(5, "Zoya");
hm.put(78, "Yash");
hm.put(10, "Praveen");
hm.put(67, "Boby");
hm.put(1, "Ritesh");
System.out.println("Before Sorting:");
Set set = hm.entrySet();
Iterator iterator = set.iterator();
while(iterator.hasNext()) {Map.Entry map = (Map.Entry)iterator.next();
System.out.println("Roll no:"+map.getKey()+"Name:"+map.getValue());
}Map<
Integer, String>
map = sortValues(hm);
System.out.println("\n");
System.out.println("After Sorting:");
Set set2 = map.entrySet();
Iterator iterator2 = set2.iterator();
while(iterator2.hasNext()) {Map.Entry me2 = (Map.Entry)iterator2.next();
System.out.println("Roll no:"+me2.getKey()+"Name:"+me2.getValue());
}}//method to sort valuesprivate static HashMap sortValues(HashMap map) { List list = new LinkedList(map.entrySet());
//Custom ComparatorCollections.sort(list, new Comparator() {public int compare(Object o1, Object o2) {return ((Comparable) ((Map.Entry) (o1)).getValue()).compareTo(((Map.Entry) (o2)).getValue());
}});
//copying the sorted list in HashMap to preserve the iteration orderHashMap sortedHashMap = new LinkedHashMap();
for (Iterator it = list.iterator();
it.hasNext();
) { Map.Entry entry = (Map.Entry) it.next();
sortedHashMap.put(entry.getKey(), entry.getValue());
} return sortedHashMap;
}}
输出:
Before Sorting:Roll no:1Name:RiteshRoll no:67Name:BobyRoll no:5Name:ZoyaRoll no:6Name:TusharRoll no:10Name:PraveenRoll no:12Name:AshuRoll no:78Name:YashAfter Sorting:Roll no:12Name:AshuRoll no:67Name:BobyRoll no:10Name:PraveenRoll no:1Name:RiteshRoll no:6Name:TusharRoll no:78Name:YashRoll no:5Name:Zoya
推荐阅读
- 如何在Java中获取字符串输入
- 如何在Java中对列表进行排序
- 本图文详细教程详细说明win7如何设置wifi热点
- 为你回答win7如何清洗打印机
- 技术编辑教您win7如何设置透明主题
- 告诉你WIN7字体含糊怎样处理
- 本文教你怎样设置共享网络打印机
- 为你回答win7怎样更改桌面背景
- 本图文详细教程详细说明如何运用格式化命令format