Comparator自定义排序的使用
java对于集合的自定义排序方法有:
Arrays.sort(T[],Comparator<?superT>c);
Collections.sort(List<T>list,Comparator<?superT>c);
这里记录下对Comparator的自己理解。
Demo代码如下:
1.实体类代码:
classSortObj{
Stringletter;
intnum;
publicSortObj(Stringletter,intnum){
this.letter=letter;
this.num=num;
}
}
2.Comparator的实现代码,两个类分别为:
/**
*字符排序(#排于最后)
*/
classStrComparatorimplementsComparator<SortObj>{
@Override
publicintcompare(SortObjo1,SortObjo2){
if("#".equals(o1.letter)&&"#".equals(o2.letter)){
return0;
}elseif("#".equals(o1.letter)){
return1;
}elseif("#".equals(o2.letter)){
return-1;
}
returno1.letter.compareTo(o2.letter);
}
}
/**
*数字排序(升序)
*/
classNumComparatorimplementsComparator<SortObj>{
@Override
publicintcompare(SortObjo1,SortObjo2){
if(o1.num>o2.num){
return1;
}elseif(o1.num<o2.num){
return-1;
}else{
return0;
}
}
}
3.调用排序并展示:
findViewById(R.id.btn_num_sort).setOnClickListener(newView.OnClickListener(){
@Override
publicvoidonClick(Viewv){
Collections.sort(dataNum,newNumComparator());
printInfo(dataNum);
}
});
findViewById(R.id.btn_str_sort).setOnClickListener(newView.OnClickListener(){
@Override
publicvoidonClick(Viewv){
Collections.sort(dataStr,newStrComparator());
printInfo(dataStr);
}
});
显示结果如下:
数字排序:
SortTest:(b,1)(r,2)(a,2)(a,3)(#,4)(#,5)
字符排序:
SortTest:(a,3)(a,2)(b,1)(r,2)(#,4)(#,5)
排序算法在compare中执行:
返回结果为3种:正整数(1),负整数(-1),0
自己对返回结果的理解(纯属自己的看法):
这个有点冒泡排序的意思,当为正整数时,交换o1与o2的位置,当为负整数时,不换位置