本帖最后由 云惟桉 于 2012-5-21 18:30 编辑
- package cn.yun.test;
- import java.util.*;
- public class test7 {
-
- public static void birthday(String[] birthdays) {
- Map<String, Integer> map = new TreeMap<String, Integer>();
- for(String birthday : birthdays) {
- if(map.get(birthday) == null) {
- map.put(birthday, 1);
- } else {
- int value = map.get(birthday) + 1;
- map.put(birthday, value);
- }
- }
- System.out.println(map);
- Set<Map.Entry<String, Integer>> set = map.entrySet();
- List<Map.Entry<String, Integer>> entrys = new ArrayList<Map.Entry<String,Integer>>();
-
- for(Iterator<Map.Entry<String, Integer>> it = set.iterator();it.hasNext();){
- entrys.add(it.next());
- }
-
- Collections.sort(entrys,new Comparator<Map.Entry<String, Integer>>(){ //这个地方报错了 编译器报了参数类型不匹配错误 我十分不解 望高手给予解答
- public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
- Map.Entry<String, Integer> m1 = o1;
- Map.Entry<String, Integer> m2 = o2;
- if(m1.getValue() > m2.getValue()) {
- return -1;
- } else if(m1.getValue() < m2.getValue()) {
- return 1;
- } else {
- return 0;
- }
- }
- });
-
- System.out.println("日期重复次数从多到少排列为:");
- for(Map.Entry<String, Integer> entry : entrys) { //这里把上面经过重新排列的数组ForEach输出
- System.out.println(entry.getKey() + "---------------->" + entry.getValue());
- }
-
- }
-
- public static void main(String[] args) {
- birthday(args); //这里我在运行参数里 随便的输入了一些日期 比如 0404 0512什么的
- }
- }
复制代码 不好意思刚我看错了,用手机就是容易看漏代码不好意思噢。。
楼主的报错我没遇到,就是楼主说的【参数不匹配】错误我没遇到。
不过按照楼主的代码输入了,运行时会报【类型转换异常】。
根源是泛型的问题:
Map.Entry<String, Integer>[] entrys = (Map.Entry<String, Integer>[])set.toArray();
以上这一句使用了参数化类型的数组,因为有转换操作,是运行时异常,编译时没报错。
但是,java的语法规定,是不可以定义参数化类型数组的。
比如说:Pair<String>[] table =new Pair<String>[10]; //ERROR
如果楼主想进一步了解原理,可以上网查询资料,讲得绝对比我清楚的。
然后这时就不能用Arrays的sort方法了,但是需要啊排序可以使用Collections的sort方法,将一个List进行排序
因此就需要以下操作:
Set<Map.Entry<String, Integer>> set = map.entrySet();
List<Map.Entry<String, Integer>> entrys = new ArrayList<Map.Entry<String,Integer>>();
for(Iterator<Map.Entry<String, Integer>> it = set.iterator();it.hasNext();){
entrys.add(it.next());
}
用迭代把一个set转换成list。然后就可以使用方法进行排序来了。
结果是正确的,楼主可以尝试一下。
还想提醒楼主的是,尽量少用强制类型转换,容易出错,能用参数化类型(泛型)的地方尽量用泛型{:soso_e100:}
|