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的位置,当为负整数时,不换位置

相关推荐