java 对map或hashmap排序的两种方法

摘要: Map 这个在java 程序中最常见的类型,通常使用的是其具体的实现 hashmap 来定义数据。但存储在hashmap里面的数据,经常会根据需要,进行排序处理,在这里总结了两种方法来排序,如果以后发现其他的,继续增加1. 根据 map 的 key 值来排序 ( 利用treemap 特性实现 )2. 根据 map 的 value 值来排序( 利用 list 特性实现 )

Map 这个在java 程序中最常见的类型,通常使用的是其具体的实现 hashmap 来定义数据。但存储在hashmap里面的数据,经常会根据需要,进行排序处理,在这里总结了两种方法来排序,如果以后发现其他的,继续增加
1. 根据 map 的 key 值来排序 ( 利用treemap 特性实现 )
2. 根据 map 的 value 值来排序( 利用 list 特性实现 )

下面是两种处理办法的代码
第一种办法,根据key 排序

package test;
import java.util.HashMap;
import java.util.Map;
import java.util.TreeMap;
 
public class MapOrderByKey { 
	public static void main(String[] args) { 
		Map unsortMap = new HashMap();
		unsortMap.put("2", "B");
		unsortMap.put("1", "A");
		unsortMap.put("4", "D");
		unsortMap.put("3", "B");
		unsortMap.put("7", "C");
		unsortMap.put("5", "z");
		unsortMap.put("6", "b");
		unsortMap.put("8", "a");
 
		System.out.println("Unsort Map......");
		printMap(unsortMap); 
		System.out.println("Sorted Map......");
		Map treeMap = new TreeMap(unsortMap);
		printMap(treeMap); 
	}
 
	public static void printMap(Map map) {
		for (Map.Entry entry : map.entrySet()) {
			System.out.println("Key : " + entry.getKey() + " Value : "
				+ entry.getValue());
		}
	}
 
}

运行之后,你会发现,输出结果按照 key 的顺序排列了,说明这种方法可行.
结果如下:
Unsort Map......
Key : 3 Value : B
Key : 2 Value : B
Key : 1 Value : A
Key : 7 Value : C
Key : 6 Value : b
Key : 5 Value : z
Key : 4 Value : D
Key : 8 Value : a
Sorted Map......
Key : 1 Value : A
Key : 2 Value : B
Key : 3 Value : B
Key : 4 Value : D
Key : 5 Value : z
Key : 6 Value : b
Key : 7 Value : C
Key : 8 Value : a


第二种办法,根据value 进行排序
package test;

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;
 
public class MapOrderByValue {
 
	public static void main(String[] args) {
 
		Map unsortMap = new HashMap();
		unsortMap.put("2", "B");
		unsortMap.put("1", "A");
		unsortMap.put("4", "D");
		unsortMap.put("3", "B");
		unsortMap.put("7", "C");
		unsortMap.put("5", "z");
		unsortMap.put("6", "b");
		unsortMap.put("8", "a");
 
		System.out.println("Unsort Map......");
		printMap(unsortMap);
 
		System.out.println("Sorted Map......");
		Map sortedMap = sortByComparator(unsortMap);
		printMap(sortedMap);
 
	}
 
	private static Map sortByComparator(Map unsortMap) { 
		List list = new LinkedList(unsortMap.entrySet()); 
		// sort list based on comparator
		Collections.sort(list, new Comparator() {
			public int compare(Object o1, Object o2) {
				return ((Comparable) ((Map.Entry) (o1)).getValue())
                                       .compareTo(((Map.Entry) (o2)).getValue());
			}
		});
 
		// put sorted list into map again
                //LinkedHashMap make sure order in which keys were inserted
		Map sortedMap = new LinkedHashMap();
		for (Iterator it = list.iterator(); it.hasNext();) {
			Map.Entry entry = (Map.Entry) it.next();
			sortedMap.put(entry.getKey(), entry.getValue());
		}
		return sortedMap;
	}
 
	public static void printMap(Map map){
		for (Map.Entry entry : map.entrySet()) {
			System.out.println("Key : " + entry.getKey() 
                                   + " Value : " + entry.getValue());
		}
	}
}


运行,你会发现,后来的结果是按照value来排序的。在仔细看代码,你会发现,其实现的一个基本原理就是将 map 转为 list ,然后利用Comparator 对 list 进行排序,最后再把排好序的值放入 map 里面。这样就实现了在map里面对value 进行排序.

上一篇: 怎么在linux 下查找一个文件
下一篇: 在centos 6.2,python2.7 下安装QT 4.8.3,pyqt 4.9.5 详细步骤

Avatar

qwe 评论于: 2012-12-11

如果KEY 是由 1位数 2位数 3位数 混合组成的话 根据KEY 排列好像有点问题
 评论 ( What Do You Think )
名称
邮箱
网址
评论
验证
   
 

 


  • 微信公众号

  • 我的微信

站点声明:

1、一号门博客CMS,由Python, MySQL, Nginx, Wsgi 强力驱动

2、部分文章或者资源来源于互联网, 有时候很难判断是否侵权, 若有侵权, 请联系邮箱:summer@yihaomen.com, 同时欢迎大家注册用户,主动发布无版权争议的 文章/资源.

3、鄂ICP备14001754号-3, 鄂公网安备 42280202422812号