楼主,你这个问题很有意思哦,我给你的解决方法是
第一种解决方案:正常的比较器做法是不会作为内部类来使用的,你可以把按照正常的方式来,就没问题了。
代码就不贴了,你只需要把你的那个比较器别作为内部类来使用就行了,这个不用我细说了吧
第二种解决方案:如果楼主你真心的想用内部类来实现,那么给你的这个这个内部类来个静态修饰吧,就是让内部类和外部类在加载的时候保持一致的步调,代码如下:import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class CollectionsDemo1 {
public static void main(String[]args)
{
sortDemo();
}
public static void sortDemo()
{
List<String> ss=new ArrayList<String>();
ss.add("abc");
ss.add("a");
ss.add("tbceet");
ss.add("zbcfd");
sop(ss);
Collections.sort(ss,new sortComparator());
sop(ss);
}
//在这里给你的内部类加个静态就哦了!!!
static class sortComparator implements Comparator<String>
{
public int compare(String s1,String s2)
{
if (s1.length()>s2.length())
return 1;
if (s1.length()<s2.length())
return -1;
return s1.compareTo(s2);
}
}
public static void sop(Object obj)
{
System.out.println(obj);
}
}
第三种解决方法:嘿嘿,楼主,这个方法估计你会蒙圈的,用匿名内部类来实现。代码如下:
Collections.sort(ss,new Comparator<String>(){
public int compare(String s1,String s2){
if (s1.length()>s2.length())
return 1;
if (s1.length()<s2.length())
return -1;
return s1.compareTo(s2);
}
});//将比较器作为匿名内部类来传递就不会出现错误了
求:加分! |