我试着写了一下: import java.util.*; public class AAA { public static void main(String[] args) { List mylist=new ArrayList(); BB aa=new BB("dd","aa"); mylist.add(aa); BB bb=new BB("cc","bb"); mylist.add(bb); BB cc=new BB("bb","cc"); mylist.add(cc); BB dd=new BB("aa","dd"); mylist.add(dd); System.out.println(((BB)mylist.get(0)).getAa()); System.out.println(((BB)mylist.get(1)).getAa()); System.out.println(((BB)mylist.get(2)).getAa()); System.out.println(((BB)mylist.get(3)).getAa()); try{ Collections.sort(mylist); }catch(ClassCastException e){ e.printStackTrace(); } System.out.println(((BB)mylist.get(0)).getAa()); System.out.println(((BB)mylist.get(1)).getAa()); System.out.println(((BB)mylist.get(2)).getAa()); System.out.println(((BB)mylist.get(3)).getAa()); } } class BB implements Comparator { private String aa; private String bb; public BB(String aa,String bb){ this.aa=aa; this.bb=bb; } public void setAa(String aa){ this.aa=aa; } public String getAa(){ return aa; } public void setBb(String bb){ this.bb=bb; } public String getBb(){ return bb; } public int compare(Object element1, Object element2) { String lower1 = ((BB)element1).getAa().toString().toLowerCase(); String lower2 = ((BB)element2).getAa().toString().toLowerCase(); return lower1.compareTo(lower2); } } 到sort的时候报错,不知道是为什么@_@ 请高手指点一下~~~~
错误信息: java.lang.ClassCastException at java.util.Arrays.mergeSort(Arrays.java:1152) at java.util.Arrays.sort(Arrays.java:1079) at java.util.Collections.sort(Collections.java:113) at AAA.main(AAA.java:20)
首先 重写compare 同时也需要重写equals 和 hashcode方法
javadoc中的解释: ClassCastException - if the list contains elements that are not mutually comparable (for example, strings and integers). 呵呵;
try{ Collections.sort(mylist, new BB("aa", "aa")); }catch(ClassCastException e){ e.printStackTrace(); }
但如果你的对象比较复杂,又或者你有多种排序的准则,
只通过POJO implements Comparable可能有点不够灵活。
另一个解决方法是实现一个Comparator, 比如
POJOComparator, 完成compare, equals两个方法。通过 Collections.sort(List list, Comparator comp);
来实现排序。
import java.util.*;
public class AAA
{
public static void main(String[] args)
{ List mylist=new ArrayList();
BB aa=new BB("dd","aa");
mylist.add(aa);
BB bb=new BB("cc","bb");
mylist.add(bb);
BB cc=new BB("bb","cc");
mylist.add(cc);
BB dd=new BB("aa","dd");
mylist.add(dd);
System.out.println(((BB)mylist.get(0)).getAa());
System.out.println(((BB)mylist.get(1)).getAa());
System.out.println(((BB)mylist.get(2)).getAa());
System.out.println(((BB)mylist.get(3)).getAa());
try{
Collections.sort(mylist);
}catch(ClassCastException e){
e.printStackTrace();
}
System.out.println(((BB)mylist.get(0)).getAa());
System.out.println(((BB)mylist.get(1)).getAa());
System.out.println(((BB)mylist.get(2)).getAa());
System.out.println(((BB)mylist.get(3)).getAa());
}
}
class BB implements Comparator
{
private String aa;
private String bb;
public BB(String aa,String bb){
this.aa=aa;
this.bb=bb;
}
public void setAa(String aa){
this.aa=aa;
}
public String getAa(){
return aa;
}
public void setBb(String bb){
this.bb=bb;
}
public String getBb(){
return bb;
}
public int compare(Object element1, Object element2) {
String lower1 =
((BB)element1).getAa().toString().toLowerCase();
String lower2 =
((BB)element2).getAa().toString().toLowerCase();
return lower1.compareTo(lower2);
}
}
到sort的时候报错,不知道是为什么@_@ 请高手指点一下~~~~
java.lang.ClassCastException
at java.util.Arrays.mergeSort(Arrays.java:1152)
at java.util.Arrays.sort(Arrays.java:1079)
at java.util.Collections.sort(Collections.java:113)
at AAA.main(AAA.java:20)
ClassCastException - if the list contains elements that are not mutually comparable (for example, strings and integers). 呵呵;
Collections.sort(mylist, new BB("aa", "aa"));
}catch(ClassCastException e){
e.printStackTrace();
}