Java TreeMap排序算法實(shí)例
本文實(shí)例講述了Java TreeMap排序算法。分享給大家供大家參考,具體如下:
TreeMap 和 HashMap 用法大致相同,但實(shí)際需求中,我們需要把一些數(shù)據(jù)進(jìn)行排序;
以前在項(xiàng)目中,從數(shù)據(jù)庫(kù)查詢出來(lái)的數(shù)據(jù)放在List中,順序都還是對(duì)的,但放在HashMap中,順序就完全亂了。
為了處理排序的問(wèn)題:
1. 對(duì)于一些簡(jiǎn)單的排序,如:數(shù)字,英文字母等
TreeMap hm = new TreeMap<String, String>(new Comparator() { public int compare(Object o1, Object o2) { //如果有空值,直接返回0 if (o1 == null || o2 == null) return 0; return String.valueOf(o1).compareTo(String.valueOf(o2)); } });
備注:
compareTo(String str)
:是String 提供的一個(gè)方法,如果參數(shù)字符串等于此字符串,則返回 0 值;如果按字典順序此字符串小于字符串參數(shù),則返回一個(gè)小于 0 的值;如果按字典順序此字符串大于字符串參數(shù),則返回一個(gè)大于 0 的值。
int compare(T o1,T o2)
:隨第一個(gè)參數(shù)小于、等于或大于第二個(gè)參數(shù)而分別返回負(fù)整數(shù)、零或正整數(shù)。
2. 對(duì)于處理有中文排序的問(wèn)題
TreeMap hm = new TreeMap<String, String>(new Comparator() { public int compare(Object o1, Object o2) { //如果有空值,直接返回0 if (o1 == null || o2 == null) return 0; CollationKey ck1 = collator.getCollationKey(String.valueOf(o1)); CollationKey ck2 = collator.getCollationKey(String.valueOf(o2)); return ck1.compareTo(ck2); } });
備注: CollationKey:CollationKey 表示遵守特定 Collator 對(duì)象規(guī)則的 String。
比較兩個(gè)CollationKey 將返回它們所表示的 String 的相對(duì)順序。使用 CollationKey來(lái)比較 String 通常比使用 Collator.compare 更快。因此,當(dāng)必須多次比較 String 時(shí)(例如,對(duì)一個(gè) String 列表進(jìn)行排序),使用 CollationKey 會(huì)更高效。
實(shí)例:
package ChineseSort; import java.util.Collection; import java.util.Iterator; import java.util.SortedMap; import java.util.TreeMap; public class TestSort { public static void main(String[] args) { // TODO Auto-generated method stub CollatorComparator comparator = new CollatorComparator(); TreeMap map = new TreeMap(comparator); for(int i=0; i<10; i++) { String s = ""+(int)(Math.random()*1000); map.put(s,s); } map.put("abcd","abcd"); map.put("Abc", "Abc"); map.put("bbb","bbb"); map.put("BBBB", "BBBB"); map.put("北京","北京"); map.put("中國(guó)","中國(guó)"); map.put("上海", "上海"); map.put("廈門", "廈門"); map.put("香港", "香港"); map.put("碑海", "碑海"); Collection col = map.values(); Iterator it = col.iterator(); while(it.hasNext()) { System.out.println(it.next()); } } }
比較器類:
package ChineseSort; import java.text.CollationKey; import java.text.Collator; import java.util.Comparator; public class CollatorComparator implements Comparator { Collator collator = Collator.getInstance(); public int compare(Object element1, Object element2) { CollationKey key1 = collator.getCollationKey(element1.toString()); CollationKey key2 = collator.getCollationKey(element2.toString()); return key1.compareTo(key2); } }
運(yùn)行該類,運(yùn)行結(jié)果如下:
325 62 653 72 730 757 874 895 909 921 Abc abcd bbb BBBB 碑海 北京 上海 廈門 香港 中國(guó)
此時(shí)可以看到中文的排序已經(jīng)完成正常。如果想不讓英文區(qū)分大小寫,則修改CollatorComparator類,找到
element1.toString()
修改為:
element1.toString().toLowerCase()
當(dāng)然你改成轉(zhuǎn)換成大寫的也無(wú)所謂了,當(dāng)然
element2.toString()
也要同時(shí)修改為
element2.toString().toLowerCase()
更多關(guān)于java算法相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java操作DOM節(jié)點(diǎn)技巧總結(jié)》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總》
希望本文所述對(duì)大家java程序設(shè)計(jì)有所幫助。
相關(guān)文章
Java配置JDK開發(fā)環(huán)境及環(huán)境變量
這篇文章主要為大家詳細(xì)介紹了Java配置JDK開發(fā)環(huán)境及環(huán)境變量,文中安裝步驟介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-09-09Java實(shí)現(xiàn)學(xué)生管理系統(tǒng)(控制臺(tái)版本)
這篇文章主要為大家詳細(xì)介紹了如何利用Java語(yǔ)言實(shí)現(xiàn)控制臺(tái)版本的學(xué)生管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-06-06Scala可變參數(shù)列表,命名參數(shù)和參數(shù)缺省詳解
這篇文章主要介紹了Scala可變參數(shù)列表,命名參數(shù)和參數(shù)缺省詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-06-06SpringCloud?Gateway之請(qǐng)求應(yīng)答日志打印方式
這篇文章主要介紹了SpringCloud?Gateway之請(qǐng)求應(yīng)答日志打印方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-03-03Java?實(shí)戰(zhàn)項(xiàng)目之家政服務(wù)平臺(tái)系統(tǒng)的實(shí)現(xiàn)流程
讀萬(wàn)卷書不如行萬(wàn)里路,只學(xué)書上的理論是遠(yuǎn)遠(yuǎn)不夠的,只有在實(shí)戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用java+SSM+jsp+mysql+maven實(shí)現(xiàn)家政服務(wù)平臺(tái)系統(tǒng),大家可以在過(guò)程中查缺補(bǔ)漏,提升水平2021-11-11如何在MyBatis中實(shí)現(xiàn)DataSource
今天給大家整理了如何在MyBatis中實(shí)現(xiàn)DataSource,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)java的小伙伴們很有幫助,需要的朋友可以參考下2021-06-06Java屬性文件操作之Properties與ResourceBundle詳解
這篇文章主要介紹了Java屬性文件操作之Properties與ResourceBundle詳解,兩個(gè)類都可以讀取屬性文件中以key/value形式存儲(chǔ)的鍵值對(duì),ResourceBundle讀取屬性文件時(shí)操作相對(duì)簡(jiǎn)單,需要的朋友可以參考下2023-11-11