今天做的时候用到了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());
}
}
}