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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑马张平 中级黑马   /  2012-4-11 14:59  /  1640 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

import java.util.*;

class GenericDemo
{
        public static void main(String[] args)
        {
                ArrayList<String> al=new ArrayList<String>(new MyCompare());
                al.add("asd001");
                al.add("asd021");
                al.add("asd022223");
                al.add("asd0111114");
//                al.add(4);
                for (Iterator<String> it=al.iterator();it.hasNext() ; )
                {
                        String s=(String)it.next();
                        sop(s.length());
                }
        }
        public static void sop(Object o)
        {
                System.out.println(o);
        }
}
class MyCompare implements Comparator<String>
{
        public int compare(String s1,String s2)
        {
                int num=new Integer(s1).compareTo(new Integer(s2));
                if (num==0)
                {
                        return s1.compareTo(s2);
                }
                return num;
        }
}



GenericDemo.java:7: 错误: 对于ArrayList(MyCompare), 找不到合适的构造器
                ArrayList<String> al=new ArrayList<String>(new MyCompare());
                                     ^
    构造器 ArrayList.ArrayList(Collection<? extends String>)不适用
      (无法通过方法调用转换将实际参数MyCompare转换为Collection<? extends String>
)
    构造器 ArrayList.ArrayList()不适用
      (实际参数列表和形式参数列表长度不同)
    构造器 ArrayList.ArrayList(int)不适用
      (无法通过方法调用转换将实际参数MyCompare转换为int)
1 个错误

3 个回复

倒序浏览
请帮帮忙看看!
回复 使用道具 举报
改成这样。问题己解决!

import java.util.*;

class GenericDemo2
{
        public static void main(String[] args)
        {
                TreeSet<String> al=new TreeSet<String>(new MyCompare());
                al.add("asd");
                al.add("asd021");
                al.add("asd022223");
                al.add("asd0111114");

                for (Iterator<String> it=al.iterator();it.hasNext() ; )
                {
                        String s=(String)it.next();
                        sop(s.length());
                }
        }
        public static void sop(Object o)
        {
                System.out.println(o);
        }
}
class MyCompare implements Comparator<String>
{
        public int compare(String s1,String s2)
        {
//                String s1=(String)o1;
//                String s2=(String)o2;
                int num=new Integer(s1.length()).compareTo(new Integer(s2.length()));
                if (num==0)
                {
                        return s1.compareTo(s2);
                }
                return num;
        }
}
回复 使用道具 举报
ArrayList  的构造函数中没有能够添加比较器的构造函数,因此会出现以上的错误。而TreeSet 的构造函数中可以添加构造器,TreeSet(Comparator<? super E> comparator)  因此
可以把ArrayList 改成TreeSet  ,在你的MyCompare 比较器中int num=new Integer(s1).compareTo(new Integer(s2)) 比较会出现 java.lang.NumberFormatException异常,所以应该比较的是长度  int num=new Integer(s1.length()).compareTo(new Integer(s2.length()))。

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马