黑马程序员技术交流社区
标题:
对map集合进行排序
[打印本页]
作者:
Friendy89
时间:
2013-9-7 12:20
标题:
对map集合进行排序
本帖最后由 Friendy89 于 2013-9-8 09:32 编辑
需求:将map集合中的元素按数字排序,数字相同的按字典顺序排序。这个代码应该怎么写,没思路
import java.util.TreeMap;
/*
* 需求:将map集合中的元素按数字排序,数字相同的按字典顺序排序
*/
public class TreeMapTest2 {
public static void main(String[] args) {
TreeMap<String,Integer> map = new TreeMap<String,Integer>();
map.put("abc", 5);
map.put("mvpd", 3);
map.put("zz", 3);
map.put("itcast", 1);
map.put("qq", 4);
map.put("vip", 5);
System.out.println(map);
}
}
复制代码
作者:
天地有我
时间:
2013-9-7 13:44
package cc;
import java.util.Comparator;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
import java.util.TreeSet;
/*
* 需求:将map集合中的元素按数字排序,数字相同的按字典顺序排序
*/
public class TreeMapTest2
{
public static void main(String[] args)
{
TreeMap<String, Integer> map = new TreeMap<String, Integer>();
map.put("abc", 5);
map.put("mvpd", 3);
map.put("zz", 3);
map.put("itcast", 1);
map.put("qq", 4);
map.put("vip", 5);
System.out.println(map);
Set<Map.Entry<String, Integer>> set = new TreeSet<Map.Entry<String, Integer>>(new MyComparator());
Set<Map.Entry<String, Integer>> entrySet = map.entrySet();
for (Map.Entry<String, Integer> entry : entrySet)
{
set.add(entry);
}
//排序后的结果
System.out.println(set);
//输出每一个
for(Iterator<Map.Entry<String, Integer>> ite = set.iterator(); ite.hasNext();)
{
System.out.println(ite.next());
}
}
}
//定义比较器,将Map中的key,和value看做一个整体
class MyComparator implements Comparator<Map.Entry<String, Integer>>
{
@Override
public int compare(Map.Entry<String, Integer> entry1, Map.Entry<String, Integer> entry2)
{
if(entry1.getValue() == entry2.getValue())
{
return entry1.getKey().compareTo(entry2.getKey());
}
return entry1.getValue() - entry2.getValue();
}
}
作者:
第一印象
时间:
2013-9-7 15:26
Map集合的二叉树排序默认是对键进行排序,利用的是compare方法,对两个键进行比较,你这个键是String类型的,String类型默认实现了Comparable接口,是用的元素内容的自然顺序,所以你这个打印出来的顺序应该是按照你的键的自然顺序排列的,也就是按照键的a,b,c,d这种顺序排下来的,要想对放入TreeMap内容进行排序,也可以利用这个compare方法,不过你传如这个方法的元素可以跟二楼说的一样,传Map.Entry<String, Integer>类型的,这样你就可以根据键拿到值进行比较,实现内容的排序,楼上已经贴出了代码说的很详,佩服
作者:
Friendy89
时间:
2013-9-8 09:31
谢谢各位搞定了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2