java对于集合的自定义排序方法有:
Arrays.sort(T[],Comparator c);
Collections.sort(List list,Comparator c);
这里记录下对Comparator的自己理解。
Demo代码如下:
1.实体类代码:
class SortObj {
String letter;
int num;
public SortObj(String letter, int num) {
this.letter = letter;
this.num = num;
}
}
2.Comparator的实现代码,两个类分别为:
/**
* 字符排序(#排于最后)
*/
class StrComparator implements Comparator {
@Override
public int compare(SortObj o1, SortObj o2) {
if("#".equals(o1.letter) && "#".equals(o2.letter)){
return 0;
}else if("#".equals(o1.letter)){
return 1;
}else if("#".equals(o2.letter)){
return -1;
}
return o1.letter.compareTo(o2.letter);
}
}
/**
* 数字排序 (升序)
*/
class NumComparator implements Comparator {
@Override
public int compare(SortObj o1, SortObj o2) {
if(o1.num > o2.num){
return 1;
}else if(o1.num < o2.num){
return -1;
}else{
return 0;
}
}
}
3.调用排序并展示:
findViewById(R.id.btn_num_sort).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Collections.sort(dataNum, new NumComparator());
printInfo(dataNum);
}
});
findViewById(R.id.btn_str_sort).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Collections.sort(dataStr, new StrComparator());
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的位置,当为负整数时,不换位置