A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Friendy89 中级黑马   /  2013-9-7 12:20  /  1260 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 Friendy89 于 2013-9-8 09:32 编辑

需求:将map集合中的元素按数字排序,数字相同的按字典顺序排序。这个代码应该怎么写,没思路
  1. import java.util.TreeMap;

  2. /*
  3. * 需求:将map集合中的元素按数字排序,数字相同的按字典顺序排序
  4. */
  5. public class TreeMapTest2 {
  6.         public static void main(String[] args) {
  7.                 TreeMap<String,Integer> map = new TreeMap<String,Integer>();
  8.                 map.put("abc", 5);
  9.                 map.put("mvpd", 3);
  10.                 map.put("zz", 3);
  11.                 map.put("itcast", 1);
  12.                 map.put("qq", 4);
  13.                 map.put("vip", 5);
  14.                 System.out.println(map);
  15.         }
  16. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
EYE_SEE_YOU + 1

查看全部评分

3 个回复

倒序浏览
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();
        }
       
}

评分

参与人数 1技术分 +1 收起 理由
EYE_SEE_YOU + 1

查看全部评分

回复 使用道具 举报
Map集合的二叉树排序默认是对键进行排序,利用的是compare方法,对两个键进行比较,你这个键是String类型的,String类型默认实现了Comparable接口,是用的元素内容的自然顺序,所以你这个打印出来的顺序应该是按照你的键的自然顺序排列的,也就是按照键的a,b,c,d这种顺序排下来的,要想对放入TreeMap内容进行排序,也可以利用这个compare方法,不过你传如这个方法的元素可以跟二楼说的一样,传Map.Entry<String, Integer>类型的,这样你就可以根据键拿到值进行比较,实现内容的排序,楼上已经贴出了代码说的很详,佩服

评分

参与人数 1技术分 +1 收起 理由
EYE_SEE_YOU + 1

查看全部评分

回复 使用道具 举报
谢谢各位搞定了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马