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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张云杰 高级黑马   /  2013-6-27 01:58  /  5132 人查看  /  15 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 孙百鑫 于 2013-6-30 08:45 编辑

想了很多方法都不好使用.也百度了很多方法.. 不知道各位高手有没有好的方法 给推荐下, 需要按照value排序 应该要怎么做


评分

参与人数 1技术分 +1 收起 理由
刘凯 + 1 赞一个!

查看全部评分

15 个回复

倒序浏览
在做15分那题吗?我给你个思路。你把再new一个TreeSet<String>集合 把TreeMap集合中的key和value合在一起变成一个数组。然后自定义一个Comparator比较器去给TreeSet集合排序。这样就OK啦。
回复 使用道具 举报
王靖远 发表于 2013-6-27 02:09
在做15分那题吗?我给你个思路。你把再new一个TreeSet集合 把TreeMap集合中的key和value合在一起变成一个数 ...

“变成一个数组”这里打错了,应该变成字符串。
回复 使用道具 举报
王靖远 发表于 2013-6-27 02:09
在做15分那题吗?我给你个思路。你把再new一个TreeSet集合 把TreeMap集合中的key和value合在一起变成一个数 ...

等等 等等 什么意思 说清楚点 愣是没看懂
回复 使用道具 举报
王靖远 发表于 2013-6-27 02:13
“变成一个数组”这里打错了,应该变成字符串。

晓得了, 我先试下 多谢哥们
回复 使用道具 举报
王靖远 发表于 2013-6-27 02:13
“变成一个数组”这里打错了,应该变成字符串。

你的意思是说 我遍历出来的集合 全部给他组合成一个数组. 然后我比较器里写什么? 用什么做比较
回复 使用道具 举报
王靖远 发表于 2013-6-27 02:13
“变成一个数组”这里打错了,应该变成字符串。

哦 不对我也手贱了.. 是遍历出来组成字符串, 然后 比较器里写什么?
回复 使用道具 举报
TreeMap<Student,Integr>
TreeSet<String>ts = new TreeSet<String>(new MyComparator);
String string = student.toString()+integer; 在自定义比较器里把string里面的Integer也就是次数用String类中的方法取出来,然后拿来比较
回复 使用道具 举报
chensc 金牌黑马 2013-6-27 08:35:05
9#
学习学习!
回复 使用道具 举报
这个感觉跟我之前的做过的一道题很像,反正都是按Value排序,贴下我翻出来的代码,O(∩_∩)O~(自己现在都忘可以这样做,呵呵)。
原理是: 定义一个比较器给TreeSet集合,比较器比较的内容是通过Map.Entry的获取到键对应的值(比较器接收两个键,但是是通过键获取到值,用值进行比较);
  1.                
  2. final TreeMap<Character,Integer> tm = new TreeMap<Character,Integer>();
  3. //...................................(这里是给TreeMap添加键值的过程,因为有使用局部使用,所以上面需final修饰)
  4. //创建一个以Map映射中的Value排序的TreeSet集合;
  5.                 TreeSet<Character> ts = new TreeSet<Character>(new Comparator<Character>(){
  6.                                 public int compare(Character c1,Character c2)
  7.                                 {
  8.                                         int num = tm.get(c2)-tm.get(c1);
  9.                                         if(num==0)
  10.                                         {
  11.                                                 return c1.compareTo(c2);
  12.                                         }
  13.                                         return num;
  14.                                 }});
  15.                 for(Character i : tm.keySet())        //将Map中的键存入该TreeSet集合;
  16.                 {
  17.                         ts.add(i);
  18.                 }
复制代码
这个方法应该挺不错了,呵呵,仅供参考。

评分

参与人数 1技术分 +1 收起 理由
刘凯 + 1 赞一个!

查看全部评分

回复 使用道具 举报
10#        3Q    !    !     !
回复 使用道具 举报
郭伟杰 发表于 2013-6-27 10:10
10#        3Q    !    !     !

O(∩_∩)O~...........知识都是相互参考,这也只是一种方式,Ls童鞋的另一种方式将映射转成字符串等也可行,只不过我之前写的这种方式,比较便捷,其实我今天开头想到的是另外的方式(取出值排序,之后遍历Map的键,查看该映射关系是否与值对应),也没这么便捷,呵呵。
回复 使用道具 举报
但我试了 有问题啊  TreeSet的内部类在引用外部的TreeSet是即使TreeSet前面加了final也不行,引用不成的!
回复 使用道具 举报
请版主改成已解决.. 我根据靖远兄弟的思路 已经做出来了 15分题 表示已经拿下了
回复 使用道具 举报
zms2100 发表于 2013-6-27 08:54
这个感觉跟我之前的做过的一道题很像,反正都是按Value排序,贴下我翻出来的代码,O(∩_∩)O~(自己现在都忘 ...

跟你做的 稍微有一点点不太一样就是,, 大致的思路差不多
回复 使用道具 举报
楼主您好,帖子长时间没有动态我已经将您的帖子改成已解决。如有问题请私密我哦~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马