摘要:和方法可以對數組進行排序,但是這種方法排序要求對象所在的類必須實現接口,此接口用于指定排序規則如果一個類已經開發完成,但是在此類建立的初期并沒有實現接口,此時肯定是無法進行對象排序操作的,所以為了解決這個問題,定義了另一個比較器的操
Collections.sort() 和 Arrays.sort()方法可以對Object數組進行排序,但是這種方法排序要求對象所在的類必須實現Comparable接口,此接口用于指定排序規則
import java.util.ArrayList; import java.util.Collections; import java.util.List; public class HDTV implements Comparable{ private int size; private String brand; public HDTV(int size, String brand) { this.size = size; this.brand = brand; } public int getSize() { return size; } public void setSize(int size) { this.size = size; } public String getBrand() { return brand; } public void setBrand(String brand) { this.brand = brand; } @Override public int compareTo(HDTV tv) { if (this.getSize() > tv.getSize()) return 1; else if (this.getSize() < tv.getSize()) return -1; else return 0; } public static void main(String[] args) { HDTV tv1 = new HDTV(55, "Samsung"); HDTV tv2 = new HDTV(60, "Sony"); HDTV tv3 = new HDTV(35, "Apple"); List list = new ArrayList (); list.add(tv1);list.add(tv2);list.add(tv3); Collections.sort(list); for (HDTV tv : list) { System.out.println(tv.getSize()+"---"+tv.getBrand()); } }
如果一個類已經開發完成,但是在此類建立的初期并沒有實現Comparable接口,此時肯定是無法進行對象排序操作的,所以為了解決這個問題,java定義了另一個比較器的操作接口--Comparator
import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; class HDTV { private int size; private String brand; public HDTV(int size, String brand) { this.size = size; this.brand = brand; } public int getSize() { return size; } public void setSize(int size) { this.size = size; } public String getBrand() { return brand; } public void setBrand(String brand) { this.brand = brand; } } class SizeComparator implements Comparator{ @Override public int compare(HDTV tv1, HDTV tv2) { int tv1Size = tv1.getSize(); int tv2Size = tv2.getSize(); if (tv1Size > tv2Size) { return 1; } else if (tv1Size < tv2Size) { return -1; } else { return 0; } } } public class Main { public static void main(String[] args) { HDTV tv1 = new HDTV(55, "Samsung"); HDTV tv2 = new HDTV(60, "Sony"); HDTV tv3 = new HDTV(42, "Panasonic"); ArrayList al = new ArrayList (); al.add(tv1); al.add(tv2); al.add(tv3); Collections.sort(al, new SizeComparator()); for (HDTV a : al) { System.out.println(a.getBrand()); } }
}
總結:
Comparable 是一個對象本身就已經支持自比較所需要實現的接口(如 String、Integer 自己就可以完成比較大小操作,已經實現了Comparable接口)
用 Comparator 是策略模式(strategy design pattern),就是不改變對象自身,而用一個策略對象(strategy object)來改變它的行為
參考:Comparable vs Comparator in Java
其他資料:
Comparable與Comparator的區別
Java Sorting: Comparator vs Comparable Tutorial
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/64150.html
摘要:與辨析聲明文章均為本人技術筆記,轉載請注明出處比較三種狀態根據需求定義序升序降序返回負數,表示比較兩元素滿足序,無須調整,返回,表示比較兩元素相等,無須調整位置,返回正數,表示比較兩元素不滿足序,按序調整位置對象內部排序源碼繼承接口的對象必 Comparator與Comparable辨析 聲明 文章均為本人技術筆記,轉載請注明出處:[1] https://segmentfault.co...
摘要:中的一切類都是繼承于,在中實現了函數所以,其它所有的類也相當于都實現了該函數。是比較和的大小。返回負數,意味著比小返回零,意味著等于返回正數,意味著大于。 Comparable Comparable 是排序接口。 Collection.sort() 和Arrays.sort()都支持可以排序實現Comparable接口的類的對象的List列表(或數組) 換而言之, 如果數組或列表想支持...
對象排序 List l可以如下排序。 Collections.sort(l); 如果List包含String元素,它將按字母順序排序,如果它由Date元素組成,它將按時間順序排序,這是怎么發生的?String和Date都實現了Comparable接口,Comparable實現為類提供了自然的順序,允許該類的對象自動排序,下表總結了一些實現Comparable的更重要的Java平臺類。 類 自然...
摘要:一內部排序接口實現該接口的類,支持自然排序內排序。方法與方法不一致。在有序集合看來和是相等的,因此第個鍵無法被添加到集合中。 一、Comparable(內部排序接口) 實現該接口的類,支持自然排序(內排序)。Arrays.sort(Object[])和Collection.sort(Object[])要求對象必須實現Comparable接口 文檔中指出: 如果該對象大于指定對象,返回...
摘要:源碼剖析由于紅黑樹的操作我這里不說了,所以這里基本上也就沒什么源碼可以講了,因為這里面重要的算法都是,這里的是指,他們是算法導論的作者,也就是說里面算法都是參照算法導論的偽代碼。因為紅黑樹是平衡的二叉搜索樹,所以其包含操作的時間復雜度都為。 本文章首發于個人博客,鑒于sf博客樣式具有賞心悅目的美感,遂發表于此,供大家學習、批評。本文還在不斷更新中,最新版可移至個人博客。? 繼上篇文章...
閱讀 545·2021-08-31 09:45
閱讀 1652·2021-08-11 11:19
閱讀 889·2019-08-30 15:55
閱讀 828·2019-08-30 10:52
閱讀 2851·2019-08-29 13:11
閱讀 2932·2019-08-23 17:08
閱讀 2838·2019-08-23 15:11
閱讀 3071·2019-08-23 14:33