锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

Java中的比较器

时间:2023-04-09 23:07:00 lqm18dh片式电感器

Java中比较器的结构方法

在java对象数组的比较经常涉及,处理方法有两种:

  1. 继承comparable接口,并实现compareTo()方法
  2. 定义一个单独的对象比较器,继承自己Comparator接口,实现compare()方法

1.Comparable 简介

Comparable 是排序接口。
若实现了一个类别Comparable接口意味着这种支持排序。 即然实现Comparable假设界面类别支持排序存在实现Comparable接口类对象List列表(或数组)List列表(或数组)可以通过 Collections.sort(或 Arrays.sort)进行排序。
另外,实现Comparable接口类对象可用作有序映射TreeMap)键或有序集合(TreeSet)不需要指定比较器中的元素。

1.1 Comparable 定义

Comparable 界面只包含一个函数,其定义如下:
package java.lang;
import java.util.*;

public interface Comparable {
public int compareTo(T o);
}
说明:假设我们通过 x.compareTo(y) 来比较x和y大小。如果回到负数,就意味着x比y小零意味着零x等于y返回正数意味着x大于y”。

2.Comparator 简介

Comparator 是比较器接口。
我们若需要控制某个类的次序,而该类本身不支持排序(即没有实现Comparable接口);然后,我们可以建立一个这种比较器来排序。这个比较器只需要实现Comparator接口就够了。也就是说,我们可以通过实现Comparator新建类比较器,然后通过比较器对类进行排序。

2.1 Comparator 定义

Comparator 界面仅包括两个函数,其定义如下:

package java.util;

public interface Comparator {

int compare(T o1, T o2);  boolean equals(Object obj); 

}
说明:
若要实现一个类Comparator接口:必须实现compareTo(T o1, T o2) 函数,但不能实现 equals(Object obj) 函数。
为什么不能实现? equals(Object obj) 函数呢? 因为默认已经实现了任何类别equals(Object obj)的。 Java所有的类都是继承的java.lang.Object,在Object.java中实现了equals(Object obj)函数;因此,所有其他类别也相当于实现了函数。
int compare(T o1, T o2) 是“比较o1和o2的大小。返回负数意味着o1比o二小;返回零意味着零o1等于o2.返回正数意味着o1大于o2”。

3.Comparator 和 Comparable 比较

Comparable是排序接口;如果实现了一个类别Comparable接口意味着这种支持排序。

而Comparator是比较器;如果需要控制某一类的顺序,可以建立这类比较器进行排序。

不难发现:Comparable相当于内部比较器Comparator相当于外部比较器。

实例代码

方法1
class Student implement Comparable{
private String name;
private double score;
public Student(String name,double score){
this.name = name;
this.score = score;
}
public double getScore(){
return this.score;
}
@Override
public String toString() {
return “姓名:” this.name ,分数: this.score;
}
public int compareTo(Student S){
If(this.score > s.score)
return 1;
Else if(this.score < s.score)
return -1
Else
return 0;
}
}

Main中应用Collections.sort(list);调用排序
方法2
class Student {
private String name;
private double score;
public Student(String name,double score){
this.name = name;
this.score = score;
}
public double getScore(){
return this.score;
}
@Override
public String toString() {
return “姓名:” this.name ,分数: this.score;
}

}
class StudentComparator implements Comparator {
@Override
public int compare(Student o1,Student o2) {
if(o1.getScore() > o2.getScore()){
return 1;
}else if(o1.getScore() < o2.getScore()){
return -1;
}else{
return 0;
}
}
}

public class TestComparator {

public static void main(String[] args) {    Student[] sts = new Student[]{    new Student("小戴",60),    new Student("小王",90),    new Student("老王",80),    new Student("小萱",95)  };    java.util.Arrays.sort(sts, new StudentComparator());  System.out.println(java.util.Arrays.toString(sts)); } 

}

或者调用Collections.sort(list,new Comparator());

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章