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

时间: 2024-10-31 17:46:54

Java 比较器的用法的相关文章

JAVA的continue用法

JAVA的continue用法: public class test{ public static void main(String [] args){  for(int i=0;i<=10;i++){   if(i%2!=0){    continue;      }   System.out.println(i);    } }} 其实很简单,continue就是中断本次循环开始下一次. 结合这段代码就是.当i是奇数时,不打印,直接结束循环,开始下一次. 还一个例子: //测试continu

汉诺塔(-) java modPow 的用法;

汉诺塔(一) 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 在印度,有这么一个古老的传说:在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针.印度教的主神梵 天在创造世界的时候,在其中一根针上从下到上地穿好了由大到小的64片金片,这就是所谓的汉诺塔.不论白天黑夜,总有一个僧侣在按照下面的法则移动这些金 片:一次只移动一片,不管在哪根针上,小片必须在大片上面.僧侣们预言,当所有的金片都从梵天穿好的那根针上移到另外一根针上时,世界就将在一声霹雳中消

JAVA正则表达式高级用法(分组与捕获)

正则表达式在字符串处理中经常使用,关于正则简单的用法相信有一点程序基础的人都懂得一些,这里就不介绍简单基础了.这里主要讲解一下在JAVA中实现了的正则的高级用法-分组与捕获.对于要重复单个字符,非常简单,直接在字符后卖弄加上限定符即可,例如 a+ 表示匹配1个或一个以上的a,a?表示匹配0个或1个a.这些限定符如下所示: X ?     X ,一次或一次也没有X *     X ,零次或多次X +     X ,一次或多次X { n }     X ,恰好 n 次X { n ,}     X ,

JAVA中ArrayList用法

JAVA中ArrayList用法 2011-07-20 15:02:03|  分类: 计算机专业 |  标签:java  arraylist用法  |举报|字号 订阅 Java学习过程中做题时,用到ArrayList,在网上寻找到的学习资料.   摘自:     http://www.cnblogs.com/skylaugh/archive/2006/09/15/505346.html System.Collections.ArrayList类是一个特殊的数组.通过添加和删除元素,就可以动态改变

java 线程基本用法

java中的多线程 一.      java 线程基本介绍 1.进程与线程的区别 进程是指一个内存中运行的应用程序,每个进程都有一块独立的内存空间,一个进程包含一到多个线程. 每个线程都有他所属的进程,每个线程也就是该进程的一条执行路径,线程之间是高频率快速轮换执行的,‘同时’执行只是给人的感觉. 2.Java当中线程一般有5中状态 创建状态:生成线程对象,并没有调用该对象的start方法,这是线程处于创建状态. 就绪状态:当调用了线程的start方法,线程就进入就绪状态,调用start方法后线

Java properties文件用法

? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 package com.suyang.properties; import java.io.FileInputStream; import java.io.FileNotFoundException;

Java数组简单用法

数组是具有相同数据类型的一组数据的集合,Java支持多为数组,一维数组的每个基本单元都是基本数据类型的数据,二维数组就是每个基本单元是一维数组的一维数组,以此类推,n维数组的每个基本单元都是n-1为数组的n-1维数组.下面以一维数组为例说明Java数组的用法. 1.数组声明 数组声明有如下两种形式(方括号的位置不同): int arr[]; int[] arr2; 2.数组初始化 数组初始化也有两种形式,如下(使用new或不使用new): int arr[] = new int[]{1, 3,

java比较器Comparable接口和Comaprator接口

java的比较器有两类,分别是Comparable接口和Comparator接口. 在为对象数组进行排序时,比较器的作用非常明显,首先来讲解Comparable接口. 让需要进行排序的对象实现Comparable接口,重写其中的compareTo(T o)方法,在其中定义排序规则,那么就可以直接调用java.util.Arrays.sort()来排序对象数组,实例如下: class Student implements Comparable<Student>{ private String n

java this的用法以及原理

/** * this存在方法中,在方法中被调用. * 且是非static方法中被调用.(this 表示这个类的当前实例,而静态方法不依赖于该类的任何实例,随着类产生而装载,因此方法内不能引用 this.) * 详情参考:Java  static的用法以及原理http://www.cnblogs.com/itcqx/p/5519464.html * 对象调用方法,this的指针指向哪个对象调用该方法那么这个对象的引用的指针就指向this,this就被赋值. * 本示例为了说明this的三种用法!