在對集合元素進行比較時一般使用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