黑马程序员技术交流社区
标题:
TreeMap 比较器里能否实现对值排序
[打印本页]
作者:
马胜平
时间:
2012-3-20 16:23
标题:
TreeMap 比较器里能否实现对值排序
本帖最后由 马胜平 于 2012-3-20 16:26 编辑
import java.util.Comparator;
import java.util.Map;
import java.util.TreeMap;
public class MapTest {
static Map<String,Integer> map=null;
public static void main(String[] args) {
map=new TreeMap<String,Integer>(new Comparator<String>(){
@Override
public int compare(String key1, String key2) {
Integer value1=map.get(key1); // Error!
Integer value2=map.get(key2); // Error!
return value1.compareTo(value2);
}
});
map.put("o", new Integer(8));
map.put("t", new Integer(2));
map.put("a", new Integer(4));
map.put("m", new Integer(28));
map.put("v",new Integer(0));
System.out.println(map);
}
}
复制代码
我现在要对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