原文地址:
http://kunling123.blog.163.com/blog/static/89909082010256312806/
做项目的时候经常遇到要将Map排序,TreeMap和SortedMap本身支持排序功能,而HashMap本身是不支持排序的,因此有必要自定义排序。
废话少说,要实现自定义排序,首先要实现Comparator接口。
- import java.util.Comparator;
- public class KeyComparator implements Comparator<Object> {
- public int compare(Object arg0, Object arg1) {
- int muti0 = (Integer) arg0;
- int muti1 = (Integer) arg1;
- if (muti0 < muti1) {
- return 1;
- } else {
- return 0;
- }
- }
- }
然后写一个测试类,实现HashMap按value排序。
- public class Test{
- public static void main(String[] args){
- KeyComparator com = new KeyComparator();
- Map<String,Integer> map = new HashMap<String,Integer>();
- map.put("a",3);
- map.put("b",1);
- map.put("c",2);
- List<Integer> list = new ArrayList<Integer>(map.values());
- Collections.sort(list,com);
- for(Map.Entry<String,Integer> entry:map.entrySet){
- System.out.println(entry.getValue());
- }
- }
- }
输出结果为:3,2,1
如果要实现HashMap按key进行排序,只需要修改如下代码:
int muti0 = (Integer) arg0;
int muti1 = (Integer) arg1;
修改为:
String muti0 = (String) arg0;
String muti1 = (String) arg1;
List<Integer> list = new ArrayList<Integer>(map.values());
修改为:
List<String> list = new ArrayList<String>(map.keySet());
System.out.println(entry.getValue());
修改为:
System.out.println(entry.getKey());
输出结果为:c,b,a