天天看点

java集合中Comparable和Comparator辨析一.Comparable和Comparator简介二。用法示例:

在对集合元素进行比较时一般使用treeset.对于简单的数据类型,treeset可以直接进行比较。但是对于复杂的数据类型,比如自己定义的数据类型或者类,就需要自己设置比较方法与比较规则了,这时就需要使用comparable和comparator。 comparable和comparator都是用来实现集合中的排序的,只是comparable是在集合内部定义的方法实现排序,而comparator是在集合外部实现的排序。所以如果想对结合排序,需要在集合外定义comparator接口的方法或在集合内部实现comparable接口的方法。

一个类实现了comparable接口则表明这个类的对象之间是可以相互比较的,这个类对象组成的结合就可以直接使用sort方法排序。

comparator是策略模式,就是在不改变对象自身,而用一种策略对象来改变它的行为,将算法和数据分离,comparator还可以在下面两种环境下使用:

   1.类在设计时没有考虑到比较问题而没有实现comparable接口,则可以通过comparator来实现排序而不必修改原来的类代码。

2.类设计时实现了comparable接口,但是后面的使用者却想用一种新的比较规则对类进行比较

comparable排序:

首先定义实现comparable接口的item类

定义对item进行排序的类,对集合进行排序是使用treeset或treemap,此处用treeset存放集合元素。

comparator排序实现示例:

首先定义需要排序的类people

接着建立对people进行排序的类,利用comparator进行排序有两种方法,第一种方法是把需要排序的people对象放在list集合中,然后调用collection.sort(list,comparator)方法进行排序;第二中排序方法是直接把comparator对象传递给treeset的构造器,并重载comparator类的compara方法,指定排序规则,这种方法不需要让people类实现comparator接口,且其代码较简洁。

comparator