黑马程序员技术交流社区

标题: TreeMap 比较器里能否实现对值排序 [打印本页]

作者: 马胜平    时间: 2012-3-20 16:23
标题: TreeMap 比较器里能否实现对值排序
本帖最后由 马胜平 于 2012-3-20 16:26 编辑
  1. import java.util.Comparator;
  2. import java.util.Map;
  3. import java.util.TreeMap;

  4. public class MapTest {
  5.         static Map<String,Integer> map=null;
  6.         public static void main(String[] args) {
  7.                 map=new TreeMap<String,Integer>(new Comparator<String>(){
  8.        

  9.                         @Override
  10.                         public int compare(String key1, String key2) {
  11.                                 Integer value1=map.get(key1);       // Error!
  12.                                 Integer value2=map.get(key2);      // Error!
  13.                                 return value1.compareTo(value2);
  14.                         }
  15.                 });
  16.                 map.put("o", new Integer(8));
  17.                 map.put("t", new Integer(2));
  18.                 map.put("a", new Integer(4));
  19.                 map.put("m", new Integer(28));
  20.                 map.put("v",new Integer(0));
  21.                 System.out.println(map);

  22.         }

  23. }
复制代码
我现在要对TreeMap的值进行排序 ,我这样写会抛出堆栈异常。为什么!我不用数组,能不能在比较器里实现对值进行排序
作者: ♂诸侯♂    时间: 2012-3-20 16:28
这个我也不懂。
作者: 尹震    时间: 2012-3-20 17:27
其实,我也卡了很久,
不过,可以告诉你一个解决的方法,
你可以定义一个方法,来进行“比较器”的操作,
主方法里把值先添加进去,
定义的方法接收主方法传过来的TreeMap集合。
大概就是这样。
祝你好运!
作者: OMG    时间: 2012-3-20 19:39
哥们,get方法在比较器中用不了的,你想想啊,集合是空的 你怎么能取出元素?
作者: OMG    时间: 2012-3-20 19:53
1,TreeMap集合是以键来排序的,如果你想以Integer对象来排序,那就把值变成键,键变值吧:new TreeMap<String,Integer>————>new TreeMap<Integer,String>
这样也不需要建立比较器了;
2,如果不原因改变键值的位置,那你可以把原来的键值封装到一个类中,然后以这个类的对象作为值,如Person(“lisi”,25);然后以Person对象为值,定义比较器时以两个Person对象为参数传给Compare(Person p1,Person p2),然后以年龄优先做比较,自然可以实现以年龄(值)排序的目的;

作者: 张锐    时间: 2012-3-20 20:58
我感觉你这里的错误原因是comparator传入的参数只有string并没有map所以comparator里面是不知道map从哪里来的。
作者: lizf2010    时间: 2015-7-24 18:57
比较器中定义的都是共性的方法,不能用某个集合或其他对象的特有数据
作者: 695212308    时间: 2016-9-15 21:54
对象都还没初始化,里面只是null,你想让null调用get方法肯定报错啊




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2