Java 比较器的用法
2019-10-08 09:12:11来源:博客园 阅读 ()
Java 比较器的用法
第一次写博客,正好在回顾Java的时候用到了比较器,记录一下使用的方法。
Java比较器多用于对象数组的排序,主要用到comparable和comparator接口
1、使用comparable接口
首先将需要实现排序对象的类实现comparable接口,实现后覆写comparaTo(T other)方法,在comparaTo方法中写出比较规则,最后调用java.utils.Arrays.sort()方法传入需要比较的对象数组即可排序。
测试如下:
1 import java.util.Arrays; 2 3 public class Main { 4 5 public static void main(String[] args) { 6 7 Student[] arr = new Student[3]; 8 arr[0] = new Student(3); 9 arr[1] = new Student(2); 10 arr[2] = new Student(1); 11 for( Student a : arr ) 12 System.out.print(a+" "); 13 Arrays.sort(arr); 14 System.out.println(); 15 for( Student a : arr ) 16 System.out.print(a+" "); 17 } 18 } 19 20 class Student implements Comparable<Student>{ 21 22 int number; 23 24 public Student(int aNumber){ 25 this.number = aNumber; 26 } 27 28 public int compareTo(Student o){//对象自身与o比较,返回1的话,被比较的对象将会排在前面。 29 if(this.number > o.number){ 30 return 1; 31 }else if(this.number == o.number){ 32 return 0; 33 }else 34 return -1; 35 } 36 37 public String toString(){ 38 return String.valueOf(number); 39 } 40 41 }
运行结果为:
3 2 1
1 2 3
注:
比较时,若想要从大到小排序,将排序方式中的1更换成-1,-1更换成1即可。
=======================================
2、使用comparator接口
有时,在设计Student类时没有考虑到实现Comparable接口,可自己编写一个比较器类.
创建一个比较器类,实现comparator<T>接口,覆写compare(T o1,T o2)方法,最后在调用Arrays.sort()时传入要排序的数组和比较器类即可
测试如下:
1 package practice; 2 import java.util.Arrays; 3 import java.util.Comparator; 4 5 public class Main { 6 7 public static void main(String[] args) { 8 9 Student[] arr = new Student[3]; 10 arr[0] = new Student(1,3); 11 arr[1] = new Student(3,5); 12 arr[2] = new Student(2,5); 13 for( Student a : arr ) 14 System.out.print(a+"\t"); 15 Arrays.sort(arr,new StudentComparator()); //传入数组和比较器类 16 System.out.println(); 17 for( Student a : arr ) 18 System.out.print(a+"\t"); 19 } 20 } 21 22 class Student{ 23 24 int number; //学号 25 int score; //分数 26 27 public Student(int aNumber,int aScore){ 28 this.number = aNumber; 29 this.score = aScore; 30 } 31 32 public String toString(){ 33 return number+"号分数:"+score; 34 } 35 36 } 37 38 class StudentComparator implements Comparator<Student>{ 39 40 public int compare(Student o1, Student o2) { //在编写时添加了新比较规则,分数高的在前,若分数相同,学号大的在前。 41 if(o1.score > o2.score) 42 return -1; 43 else if(o1.score < o2.score) 44 return 1; 45 else{ 46 if(o1.number > o2.number) 47 return -1; 48 else if(o1.number < o2.number) 49 return 1; 50 else 51 return 0; 52 } 53 } 54 55 }
运行结果:
1号分数:3 3号分数:5 2号分数:5
3号分数:5 2号分数:5 1号分数:3
上面的方法也可以像本次测试一样,修改比较规则,实现不同排序效果。
=======================================
如果想为集合类排序,与第二种方法类似,在调用Collections.sort(st,new ComparatorSort())时传入集合和比较器即可。
原文链接:https://www.cnblogs.com/ELAIRS/p/11621106.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 国外程序员整理的Java资源大全(全部是干货) 2020-06-12
- 2020年深圳中国平安各部门Java中级面试真题合集(附答案) 2020-06-11
- 2020年java就业前景 2020-06-11
- 04.Java基础语法 2020-06-11
- Java--反射(框架设计的灵魂)案例 2020-06-11
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash