美文网首页
Comparator自定义排序的使用

Comparator自定义排序的使用

作者: 简单Liml | 来源:发表于2017-05-15 10:21 被阅读79次

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

相关文章

网友评论

      本文标题:Comparator自定义排序的使用

      本文链接:https://www.haomeiwen.com/subject/woocxxtx.html