欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java TreeMap排序算法實(shí)例

 更新時(shí)間:2017年07月07日 08:59:07   作者:johennes  
這篇文章主要介紹了Java TreeMap排序算法,結(jié)合實(shí)例形式分析了TreeMap排序算法的原理、實(shí)現(xiàn)方法與相關(guān)注意事項(xiàng),需要的朋友可以參考下

本文實(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中for循環(huán)刪除集合陷阱

    java中for循環(huán)刪除集合陷阱

    java中在增強(qiáng)for循環(huán)為什么不能增刪集合呢?一個(gè)循環(huán)迭代,跟集合的增刪改沒(méi)什么關(guān)系。修改集合不是for去做的。for只管循環(huán)迭代,你在循環(huán)里邊修改集合,改變集合的長(zhǎng)度,順序?qū)ρh(huán)都有影響
    2015-05-05
  • Java配置JDK開發(fā)環(huán)境及環(huán)境變量

    Java配置JDK開發(fā)環(huán)境及環(huán)境變量

    這篇文章主要為大家詳細(xì)介紹了Java配置JDK開發(fā)環(huán)境及環(huán)境變量,文中安裝步驟介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • Java實(shí)現(xiàn)學(xué)生管理系統(tǒng)(控制臺(tái)版本)

    Java實(shí)現(xiàn)學(xué)生管理系統(tǒng)(控制臺(tái)版本)

    這篇文章主要為大家詳細(xì)介紹了如何利用Java語(yǔ)言實(shí)現(xiàn)控制臺(tái)版本的學(xué)生管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • Scala可變參數(shù)列表,命名參數(shù)和參數(shù)缺省詳解

    Scala可變參數(shù)列表,命名參數(shù)和參數(shù)缺省詳解

    這篇文章主要介紹了Scala可變參數(shù)列表,命名參數(shù)和參數(shù)缺省詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • Java synchronized與CAS使用方式詳解

    Java synchronized與CAS使用方式詳解

    提到Java的知識(shí)點(diǎn)一定會(huì)有多線程,JDK版本不斷的更迭很多新的概念和方法也都響應(yīng)提出,但是多線程和線程安全一直是一個(gè)重要的關(guān)注點(diǎn)。比如說(shuō)我們一入門就學(xué)習(xí)的synchronized怎么個(gè)實(shí)現(xiàn)和原理,還有總是被提到的CAS是啥,他和synchronized關(guān)系是啥?請(qǐng)往下看
    2023-01-01
  • SpringCloud?Gateway之請(qǐng)求應(yīng)答日志打印方式

    SpringCloud?Gateway之請(qǐng)求應(yīng)答日志打印方式

    這篇文章主要介紹了SpringCloud?Gateway之請(qǐng)求應(yīng)答日志打印方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • Java?實(shí)戰(zhàn)項(xiàng)目之家政服務(wù)平臺(tái)系統(tǒng)的實(shí)現(xiàn)流程

    Java?實(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

    今天給大家整理了如何在MyBatis中實(shí)現(xiàn)DataSource,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)java的小伙伴們很有幫助,需要的朋友可以參考下
    2021-06-06
  • android中GridView的用法示例

    android中GridView的用法示例

    這篇文章主要介紹了android中GridView的用法,對(duì)于Android初學(xué)者很有參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2014-08-08
  • Java屬性文件操作之Properties與ResourceBundle詳解

    Java屬性文件操作之Properties與ResourceBundle詳解

    這篇文章主要介紹了Java屬性文件操作之Properties與ResourceBundle詳解,兩個(gè)類都可以讀取屬性文件中以key/value形式存儲(chǔ)的鍵值對(duì),ResourceBundle讀取屬性文件時(shí)操作相對(duì)簡(jiǎn)單,需要的朋友可以參考下
    2023-11-11

最新評(píng)論