Hashmap按照value值的排序(hashmap sort by value)

今天做的时候用到了HashMap,其中类型为<String,Integer>。需要将存在HashMap中的数据按照value排序,并将排序后的key输出出来。网上搜了一下发现绝大部分都是将HashMap按照key排序,于是想出了一个解决方案,记录下来方便以后使用,也方便大家交流。
原理如下:通过HashMap.entrySet()获得Map.Entry的集合。将这个集合存储到ArrayList<Map.Entry<String, Integer>>.这时通过Collections.sort()排序。用sort方法排序需要创建实现Comparator接口的比较器。
代码片段如下:
public clsaa SortMap
{
public List<String> sortMapByValue(HashMap<String,Integer> map)
	{
		int size = map.size();
		ArrayList<Map.Entry<String, Integer>> list = new ArrayList<Map.Entry<String, Integer>>(size);
		list.addAll(map.entrySet());
		ValueComparator vc = new ValueComparator();
		Collections.sort(list, vc);
		final List<String> keys = new ArrayList<String>(size);
	    for (int i = 0; i < size; i++) {
	        keys.add(i, list.get(i).getKey());
	    }
	    return keys;	
	}
	private class ValueComparator implements Comparator<Map.Entry<String, Integer>>
	{
		public int compare(Map.Entry<String, Integer> mp1, Map.Entry<String, Integer> mp2) 
		{
	        return mp1.getValue() - mp2.getValue();
	    }
	}
	public static void main(String [] args)
	{
		Map<String,Integer> first = new HashMap<String,Integer>();
		first.put("20030120" , new Integer (56));  
        first.put("20030118" , new Integer (19));  
        first.put("20030125" , new Integer (25));  
        first.put("20030122" , new Integer (32));  
        first.put("20030117" , new Integer (67));  
        first.put("20030123" , new Integer (34));  
        first.put("20030124" , new Integer (42));  
        first.put("20030121" , new Integer (19));  
        first.put("20030119" , new Integer (98));
        SortMap pd = new SortMap();
        List<String> cixu = pd.sortMapByValue((HashMap<String,Integer>)first);
        Iterator<String> ite = cixu.iterator();
        while(ite.hasNext())
        {
        	System.out.println(ite.next());
        }
        
	}
}

你可能感兴趣的:(vc++)