cannot be cast to java.lang.Comparable问题

public static List> sortMapByValue(Map map) throws IOException{
		List> entryList = new ArrayList>(map.entrySet());
		
		Collections.sort(entryList, new Comparator>() {
			public int compare(Entry me1, Entry me2) {
				return (int) me2.getValue().compareTo(me1.getValue());
			}
		});
		
		return entryList;
	} 


之前遇到了要对Map按value排序的问题,key是String类型,value是Long类型,我是像上面这样解决的,参数map是Treemap类型,程序执行没有什么问题

今天又遇到了类似的问题,只不过key不是String了,是自己定义的一个类,value变成了int类型,将上面的方法泛型稍作修改拿来使用,参数依然使用Treemap,没想到就碰到了异常:cannot be cast to java.lang.Comparable

查阅资料得知这是因为Treemap是有序的,每插入一个键值对,都会自动的对key进行排序,但key是我自己定义的,Treemap不知道该怎么排序,所以就抛出了异常

解决方法有三种:第一种在构造TreeMap时指定一个比较器,这个比较器用于比较两个值,并且返回一个整数值作为他们的比较结果。第二种就是key实现Comparable接口。第三种就是将参数类型改为Hashmap.我采用的第三种发案,经测试达到预期的排序效果

你可能感兴趣的:(2014)