首页 > hot资讯 > 用比较器对象排序方法介绍

用比较器对象排序方法介绍

更新时间:2020-09-21 17:13 浏览107次 来源:动力节点

前面学习了什么是java对象排序以及为什么要对对象进行排序的问题,下面我们就来讲讲排序的方法——比较器对象排序方法的内容,相信java零基础的新手朋友们在学习了前面文章的基础上一定可以学会下面的内容。

先来介绍什么是比较器,比较器是一个包含一个方法的对象,这个方法能够对两个对象进行比较。则排序方法可以在需要执行两个对象之间的比较操作时,将比较器应用于这两个对象。这是学习比较器对象排序方法的第一个需要知道的内容。

对一个对象的compare To方法的定义应该在某种意义上定义对象的自然顺序。举例来说,对于电话号码本的例子,所有的条目就可以基于与条目相关的名字进行理想排序。然而有时候,compare To不能提供想要的顺序,或者更糟糕的,并没有为一个对象定义compareTo方法。在这些情况下,程序员采用另外一种方式,指定一个称为比较器(comparator)的外部比较方法。这种机制的优点是,不同的比较器可以用在相同的数据上进行不同的排序,或者基于不同的键进行排序,在java语言中,比较器可以是任何一个实现java.util.Comparator接口的类。这个接口提供了下面的方法:

image.png

与前面讨论过的compareTo方法一样,compare方法返回一个表示两个数值之间关系的整数。然而与compareTo方法不同的是,compare不与被比较的对象相关联。结果,比较器并不是对象实现专有的;它必须基于从存取函数中取得的信息进行比较。

作为比较器实现的一个例子,我们考虑一下字符串的不区分大小写的比较的实现,称为Caseless Comparator。这种比较方法将两个字符串对象都转换成大写表示,然后执行标准的字符串比较:

image.png

比较的结果是,大小写不同,拼写相同的字符被排列在一起。例如,如果数组包含着儿童的绕口令:

Fuzzy Wuzzy was a bear.

Fuzzy Wuzzy had no hair .

Fuzzy Wuzzy wasn ’t fuzzy , wuzzy?

则这些文字可以被排序成下面的顺序:

a bear. Fuzzy Fuzzy Fuzzy fuzzy, had hair.

no was wasn’t Wuzzy Wuzzy Wuzzy wuzzy?

这个结果应与字符串对象的标准排列进行比较,标准排列的输出如下:

Fuzzy Fuzzy Fuzzy Wuzzy Wuzzy Wuzzy a bear .

fuzzy, had hair . no was wasnt wuzzy?

为了在排序中使用比较器,只需要用比较器中的Compare方法代替CompareTo方法即可。例如,下面是一个使用比较器对一Object数组中的值进行排序的插入排序方法:

image.png

注意在这个描述中,我们没有看到所包含的数值类型的细节。所有的数据都作为object进行操作,而Object由比较器提供的compare方法进行操作。

其实java实现对象排序可以分为两种方式,一种是自然排序,另一种是定制排序,这篇文章介绍的比较器对象排序属于自然排序范畴,这种方法没有使用范围的局限性,所以希望大家都可以掌握比较器对象排序的方法,以更好的提高java编程能力。


热门课程推荐

全部班型支持免费试学

动力节点在线报名表(此信息已加密,请放心填写)

返回顶部