资讯详情

Java中的比较器

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());

标签: lqm18dh片式电感器

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

锐单商城 - 一站式电子元器件采购平台