首先,比較Comparable和Comparator的區(qū)別
目前創(chuàng)新互聯(lián)已為上1000家的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)站空間、綿陽服務(wù)器托管、企業(yè)網(wǎng)站設(shè)計、來鳳網(wǎng)站維護等服務(wù),公司將堅持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。
Comparable Comparator 都是用來實現(xiàn)集合中的排序的,只是 Comparable 是在集合內(nèi)部定義的方法實現(xiàn)的排序,Comparator 是在集合外部實現(xiàn)的排序,所以,如想實現(xiàn)排序,就需要在集合外定義 Comparator 接口的方法或在集合內(nèi)實現(xiàn) Comparable 接口的方法。
Comparable 是一個對象本身就已經(jīng)支持自比較所需要實現(xiàn)的接口(如 String、Integer 自己就可以完成比較大小操作);
而 Comparator 是一個專用的比較器,當(dāng)這個對象不支持自比較或者自比較函數(shù)不能滿足你的要求時,你可以寫一個比較器來完成兩個對象之間大小的比較。
可以說一個是類自已完成比較,一個是外部程序?qū)崿F(xiàn)比較的差別而已。
用 Comparator 是策略模式(strategy design pattern),就是不改變對象自身,而用一個策略對象(strategy object)來改變它的行為。
從操作上:Comparable 需要在被排序的類中實現(xiàn)其接口,而Comparator 是在被排序類的外部實現(xiàn)其接口即可.這樣可以看出Comparable操作更簡單,而Comparator操作復(fù)雜但是可以實現(xiàn)多種不同的排序方案.
比如:你想對整數(shù)采用絕對值大小來排序,Integer 是不符合要求的,你不能去修改 Integer 類去改變它的排序行為,只要使用一個實現(xiàn)了 Comparator 接口的對象來實現(xiàn)控制它的排序就行了。
實現(xiàn)Comparator接口,實現(xiàn)排序
在Comparator接口里,只有一個方法是需要實現(xiàn)的:
Java代碼
int compare(Object o1,Object o2);
int compare(Object o1,Object o2);
提示:如果o1小于o2,返回一個負數(shù);如果o1大于o2,返回一個正數(shù);如果他們相等,則返回0;
注意:compare方法一定要是對稱的,意思是compare(a,b)返回的結(jié)果要跟compare(b,a)相反。相反的結(jié)果意味著,要么返回的值帶有不同的正負號,要么都是0。注意,象compare(a,b)返回4而compare(b,a)返回-2這樣的情況是合法的。方法里常常可能拋出異常,在這個方法里拋出異常也要是對稱的。如果調(diào)用compare(a,b)時拋出了一個ClassCastException異常,那么調(diào)用compare(b,a)時也必須拋出一個ClassCastException異常。
另外:任何你準備重用的Comparator都必須是可序列化的。TreeSet和TreeMap類存儲Comparator以便進行比較,因此為了這兩個類能被序列化,它們使用的Comparator也必須能被序列化。
Comparator接口,通常被Collections.sort方法使用,它是JAVA中需要了解的一個很重要的部分,因為它有一些重要的契約義務(wù).
基礎(chǔ)類型比較本身就只有“值”,所以排序的也就是常用的排序算法,這些都不用定義什么規(guī)則,數(shù)值大就是大,數(shù)值小就是小。實現(xiàn)細節(jié)可以查看系列Arrays.sort()方法和Collections.sort()方法。其它類型(對象),例如字符串,都要自己實現(xiàn)Comparable來告訴排序算法的比較規(guī)則。String默認就實現(xiàn)Comparable,規(guī)則為字母序。
總結(jié)起來就是,基礎(chǔ)類型通過“值”就能明確大?。ㄒ簿褪遣挥米远x規(guī)則),非基礎(chǔ)類型(對象)需要實現(xiàn)Comparable來定義規(guī)則,否則沒法比較。
//?傳入array
int?siteIndex?=?0;
int??tempVariable?=?0;
for?(int?i?=?0;?i??array.length;?i++){
siteIndex?=?i;
for?(int?j?=?i+1;?j?array.length;?j++){
if(array[siteIndex]array[j]){
siteIndex?=?j;
}
tempVariable?=?array[i];
array[i]?=?array[siteIndex];
array[siteIndex]?=?tempVariable;
siteIndex?=?i;//?重新賦值
}
}
分享文章:外部排序java代碼,Java中排序
文章地址:http://chinadenli.net/article6/hdoiig.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站策劃、搜索引擎優(yōu)化、Google、微信公眾號、域名注冊、動態(tài)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)