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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 马胜平 中级黑马   /  2012-3-20 16:23  /  7200 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 马胜平 于 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的值进行排序 ,我这样写会抛出堆栈异常。为什么!我不用数组,能不能在比较器里实现对值进行排序

7 个回复

倒序浏览
这个我也不懂。
回复 使用道具 举报
其实,我也卡了很久,
不过,可以告诉你一个解决的方法,
你可以定义一个方法,来进行“比较器”的操作,
主方法里把值先添加进去,
定义的方法接收主方法传过来的TreeMap集合。
大概就是这样。
祝你好运!
回复 使用道具 举报
哥们,get方法在比较器中用不了的,你想想啊,集合是空的 你怎么能取出元素?
回复 使用道具 举报
1,TreeMap集合是以键来排序的,如果你想以Integer对象来排序,那就把值变成键,键变值吧:new TreeMap<String,Integer>————>new TreeMap<Integer,String>
这样也不需要建立比较器了;
2,如果不原因改变键值的位置,那你可以把原来的键值封装到一个类中,然后以这个类的对象作为值,如Person(“lisi”,25);然后以Person对象为值,定义比较器时以两个Person对象为参数传给Compare(Person p1,Person p2),然后以年龄优先做比较,自然可以实现以年龄(值)排序的目的;
回复 使用道具 举报
我感觉你这里的错误原因是comparator传入的参数只有string并没有map所以comparator里面是不知道map从哪里来的。
回复 使用道具 举报
比较器中定义的都是共性的方法,不能用某个集合或其他对象的特有数据
回复 使用道具 举报
对象都还没初始化,里面只是null,你想让null调用get方法肯定报错啊
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马