Comparator自定义排序的使用

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 12,885评论 0 33
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 34,596评论 18 399
  • 项目中经常会遇到列表搜索查询,大部分的查询是可以通过sql语句来实现的,有些特殊的搜索排序sql则实现不了,例如中...
    信徒_allen阅读 2,708评论 0 1
  • 一、 1、请用Java写一个冒泡排序方法 【参考答案】 public static void Bubble(int...
    独云阅读 1,492评论 0 6
  • 一、基本数据类型 注释 单行注释:// 区域注释:/* */ 文档注释:/** */ 数值 对于byte类型而言...
    龙猫小爷阅读 4,431评论 0 16

友情链接更多精彩内容