类似与比较器接口中Java中有什么不同

  

可比与比较器接口中Java中有什么不同?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

<强>详解Java中比较和比较器接口的区别

本文要来详细分析一下Java中比较和比较器接口的区别,两者都有比较的功能,那么究竟有什么区别呢,感兴趣的Java开发者继续看下去吧。

<强>可比简介

可比是排序接口。

若一个类实现了可比接口,就意味着“该类支持排序”只即然实现可比接口的类支持排序,假设现在存在“实现可比接口的类的对象的名单列表(或数组)”,则该列名单表(或数组)可以通过集合。sort(或Arrays.sort)进行排序。

此外,“实现可比接口的类的对象”可以用作“有序映射(如TreeMap)”中的键或“有序集合(TreeSet)”中的元素,而不需要指定比较器。

<强>可比定义

可比接口仅仅只包括一个函数,它的定义如下:

包java.util;
  公共接口Comparator{
  int比较(T o1、o2);
  布尔=(对象obj);
  }

说明:

(01)若一个类要实现比较器接口:它一定要实现compareTo (T o1、o2)函数,但可以不实现=(对象obj)函数。

为什么可以不实现=(对象obj)函数呢?因为任何类,默认都是已经实现了=(对象obj)的。Java中的一切类都是继承于Java . lang . Object,在对象。java中实现了=(对象obj)函数,所以,其它所有的类也相当于都实现了该函数。

(02) int比较(T o1、o2)是“比较o1和o2的大小”。返回“负数”,意味着“o1比o2小”;返回“零”,意味着“o1等于o2”;返回“正数”,意味着“o1大于o2”。

<强>比较器和可比比较

可比是排序接口,若一个类实现了可比接口,就意味着“该类支持排序”。

而比较器是比较器;我们若需要控制某个类的次序,可以建立一个“该类的比较器”来进行排序。

我们不难发现:同类相当于“内部比较器”,而比较器相当于“外部比较器”。

我们通过一个测试程序来对这两个接口进行说明。源码如下:

进口java.util。*;
  进口java.lang.Comparable;/* *
  * @desc“Comparator"和“可比”的比较程序。
  * (01)“Comparable"
  *它是一个排序接口,只包含一个函数compareTo ()。
  *一个类实现了可比接口,就意味着“该类本身支持排序”,它可以直接通过Arrays.sort()或Collections.sort()进行排序。
  * (02)“Comparator"
  *它是一个比较器接口,包括两个函数:比较平等()和()。
  *一个类实现了比较器接口,那么它就是一个“比较器”。其它的类,可以根据该比较器去排的序。
  *
  *综上所述:可比是内部比较器,而比较是外部比较器。
  *一个类本身实现了可比比较器,就意味着它本身支持排序;若它本身没实现可比性,也可以通过外部比较器比较器进行排序。
  */公开课CompareComparatorAndComparableTest {
  公共静态void main (String [] args) {//新建ArrayList(动态数组)
  ArrayList列表=new ArrayList ();//添加对象到ArrayList中
  列表。(新添加的人(“ccc" 20));
  列表。(新添加的人(“AAA" 30));
  列表。(新添加的人(“bbb" 10));
  列表。(新添加的人(“ddd" 40));//打印列表的原始序列
  System.out.printf(“原始排序,列表:% s \ n",列表);//对列表进行排序//这里会根据“人实现的Comparable接口”进行排序,即会根据“name”进行排序
  Collections.sort(列表);
  System.out.printf(“名称排序,列表:% s \ n",列表);//通过“比较器(AscAgeComparator)”,对列表进行排序//AscAgeComparator的排序方式是:根据“年龄”的升序排序
  集合。排序(列表,新AscAgeComparator ());
  System.out.printf (“Asc(年龄)排序,列表:% s \ n",列表);//通过“比较器(DescAgeComparator)”,对列表进行排序//DescAgeComparator的排序方式是:根据“年龄”的降序排序
  集合。排序(列表,新DescAgeComparator ());
  System.out.printf (“Desc(年龄)排序,列表:% s \ n",列表);//判断两个人是否相等
  testEquals ();
  }/* *
  * @desc测试两个人比较是否相等。
  *由于人实现了equals()函数:若两人的年龄、姓名都相等,则认为这两个相的人等。
  *所以,这里的p1和p2相等。
  *
  * TODO:若去中掉人的=()函数,则p1不等于p2
  */私有静态孔隙testEquals () {
  人p1=new (“eee", 100);
  人p2=new (“eee", 100);
  如果(p1.equals (p2)) {
  System.out.printf (“% s=% s \ n", p1, p2);
  其他}{
  System.out.printf (“% s”不等于% s \ n", p1, p2);
  }
  }/* *
  * @desc人类。
  *人实现了可比接口,这意味着人本身支持排序
  */私有静态类人实现Comparable

类似与比较器接口中Java中有什么不同