最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java如何對map進(jìn)行排序詳解(map集合的使用)

 更新時間:2013年12月02日 11:25:24   作者:  
這篇文章主要介紹了java如何對map進(jìn)行排序,java map集合的使用詳解,大家可以參考使用

今天做統(tǒng)計(jì)時需要對X軸的地區(qū)按照地區(qū)代碼(areaCode)進(jìn)行排序,由于在構(gòu)建XMLData使用的map來進(jìn)行數(shù)據(jù)統(tǒng)計(jì)的,所以在統(tǒng)計(jì)過程中就需要對map進(jìn)行排序。

一、簡單介紹Map

在講解Map排序之前,我們先來稍微了解下map。map是鍵值對的集合接口,它的實(shí)現(xiàn)類主要包括:HashMap,TreeMap,Hashtable以及LinkedHashMap等。其中這四者的區(qū)別如下(簡單介紹):

HashMap:我們最常用的Map,它根據(jù)key的HashCode 值來存儲數(shù)據(jù),根據(jù)key可以直接獲取它的Value,同時它具有很快的訪問速度。HashMap最多只允許一條記錄的key值為Null(多條會覆蓋);允許多條記錄的Value為 Null。非同步的。

TreeMap: 能夠把它保存的記錄根據(jù)key排序,默認(rèn)是按升序排序,也可以指定排序的比較器,當(dāng)用Iterator 遍歷TreeMap時,得到的記錄是排過序的。TreeMap不允許key的值為null。非同步的。

Hashtable: 與 HashMap類似,不同的是:key和value的值均不允許為null;它支持線程的同步,即任一時刻只有一個線程能寫Hashtable,因此也導(dǎo)致了Hashtale在寫入時會比較慢。

LinkedHashMap: 保存了記錄的插入順序,在用Iterator遍歷LinkedHashMap時,先得到的記錄肯定是先插入的.在遍歷的時候會比HashMap慢。key和value均允許為空,非同步的。

 

二、Map排序

TreeMap

TreeMap默認(rèn)是升序的,如果我們需要改變排序方式,則需要使用比較器:Comparator。

Comparator可以對集合對象或者數(shù)組進(jìn)行排序的比較器接口,實(shí)現(xiàn)該接口的public compare(T o1,To2)方法即可實(shí)現(xiàn)排序,該方法主要是根據(jù)第一個參數(shù)o1,小于、等于或者大于o2分別返回負(fù)整數(shù)、0或者正整數(shù)。如下:

復(fù)制代碼 代碼如下:

public class TreeMapTest {
    public static void main(String[] args) {
        Map<String, String> map = new TreeMap<String, String>(
                new Comparator<String>() {
                    public int compare(String obj1, String obj2) {
                        // 降序排序
                        return obj2.compareTo(obj1);
                    }
                });
        map.put("c", "ccccc");
        map.put("a", "aaaaa");
        map.put("b", "bbbbb");
        map.put("d", "ddddd");

        Set<String> keySet = map.keySet();
        Iterator<String> iter = keySet.iterator();
        while (iter.hasNext()) {
            String key = iter.next();
            System.out.println(key + ":" + map.get(key));
        }
    }
}

運(yùn)行結(jié)果如下:

d:ddddd
c:ccccc
b:bbbbb
a:aaaaa

上面例子是對根據(jù)TreeMap的key值來進(jìn)行排序的,但是有時我們需要根據(jù)TreeMap的value來進(jìn)行排序。對value排序我們就需要借助于Collections的sort(List<T> list, Comparator<? super T> c)方法,該方法根據(jù)指定比較器產(chǎn)生的順序?qū)χ付斜磉M(jìn)行排序。但是有一個前提條件,那就是所有的元素都必須能夠根據(jù)所提供的比較器來進(jìn)行比較。如下:

復(fù)制代碼 代碼如下:

public class TreeMapTest {
    public static void main(String[] args) {
        Map<String, String> map = new TreeMap<String, String>();
        map.put("d", "ddddd");
        map.put("b", "bbbbb");
        map.put("a", "aaaaa");
        map.put("c", "ccccc");

        //這里將map.entrySet()轉(zhuǎn)換成list
        List<Map.Entry<String,String>> list = new ArrayList<Map.Entry<String,String>>(map.entrySet());
        //然后通過比較器來實(shí)現(xiàn)排序
        Collections.sort(list,new Comparator<Map.Entry<String,String>>() {
            //升序排序
            public int compare(Entry<String, String> o1,
                    Entry<String, String> o2) {
                return o1.getValue().compareTo(o2.getValue());
            }

        });

        for(Map.Entry<String,String> mapping:list){
               System.out.println(mapping.getKey()+":"+mapping.getValue());
          }
    }
}


運(yùn)行結(jié)果

a:aaaaa
b:bbbbb
c:ccccc
d:ddddd

HashMap

我們都是HashMap的值是沒有順序的,他是按照key的HashCode來實(shí)現(xiàn)的。對于這個無序的HashMap我們要怎么來實(shí)現(xiàn)排序呢?參照TreeMap的value排序,我們一樣的也可以實(shí)現(xiàn)HashMap的排序。

復(fù)制代碼 代碼如下:

public class HashMapTest {
    public static void main(String[] args) {
        Map<String, String> map = new HashMap<String, String>();
        map.put("c", "ccccc");
        map.put("a", "aaaaa");
        map.put("b", "bbbbb");
        map.put("d", "ddddd");

        List<Map.Entry<String,String>> list = new ArrayList<Map.Entry<String,String>>(map.entrySet());
        Collections.sort(list,new Comparator<Map.Entry<String,String>>() {
            //升序排序
            public int compare(Entry<String, String> o1,
                    Entry<String, String> o2) {
                return o1.getValue().compareTo(o2.getValue());
            }

        });

        for(Map.Entry<String,String> mapping:list){
               System.out.println(mapping.getKey()+":"+mapping.getValue());
          }
     }
}

運(yùn)行結(jié)果

a:aaaaa
b:bbbbb
c:ccccc
d:ddddd

相關(guān)文章

  • Java中Set集合的使用和底層原理解析

    Java中Set集合的使用和底層原理解析

    這篇文章主要介紹了Java中Set集合的使用和底層原理,Set集合的功能上基本上與Collection的API一致, Set集合沒有擴(kuò)展額外的API,本文通過示例代碼給大家詳細(xì)講解,需要的朋友可以參考下
    2022-12-12
  • Spring使用RestTemplate和Junit單元測試的注意事項(xiàng)

    Spring使用RestTemplate和Junit單元測試的注意事項(xiàng)

    這篇文章主要介紹了Spring使用RestTemplate和Junit單元測試的注意事項(xiàng),具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • Java中自動裝箱、拆箱引起的耗時詳解

    Java中自動裝箱、拆箱引起的耗時詳解

    這篇文章主要給大家介紹了關(guān)于Java中自動裝箱、拆箱引起的耗時的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Java具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • spring cloud gateway整合sentinel實(shí)現(xiàn)網(wǎng)關(guān)限流

    spring cloud gateway整合sentinel實(shí)現(xiàn)網(wǎng)關(guān)限流

    這篇文章主要介紹了spring cloud gateway整合sentinel實(shí)現(xiàn)網(wǎng)關(guān)限流,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-01-01
  • Java中雙大括號初始化的理解與使用

    Java中雙大括號初始化的理解與使用

    最近重讀Java 編程思想,讀到有關(guān)實(shí)例化代碼塊兒的內(nèi)容,使我對于使用兩個大括號進(jìn)行初始化有了更深的理解,下面這篇文章主要給大家介紹了關(guān)于Java中雙大括號初始化的理解與使用的相關(guān)資料,需要的朋友可以參考下
    2022-06-06
  • springboot整合shiro登錄失敗次數(shù)限制功能的實(shí)現(xiàn)代碼

    springboot整合shiro登錄失敗次數(shù)限制功能的實(shí)現(xiàn)代碼

    這篇文章主要介紹了springboot整合shiro-登錄失敗次數(shù)限制功能,實(shí)現(xiàn)此功能如果是防止壞人多次嘗試,破解密碼的情況,所以要限制用戶登錄嘗試次數(shù),需要的朋友可以參考下
    2018-09-09
  • SpringMVC中如何獲取@PathVariable的值

    SpringMVC中如何獲取@PathVariable的值

    這篇文章主要介紹了SpringMVC中如何獲取@PathVariable的值,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • Java中線程死亡的幾種情況實(shí)例分析

    Java中線程死亡的幾種情況實(shí)例分析

    線程是進(jìn)程中的一個實(shí)體,是被系統(tǒng)獨(dú)立調(diào)度和分派的基本單位,線程自己不擁有系統(tǒng)資源,只擁有一點(diǎn)在運(yùn)行中必不可少的資源,但它可與同屬一個進(jìn)程的其它線程共享進(jìn)程所擁有的全部資源。下面這篇文章主要給大家介紹了Java線程死亡的幾種情況,需要的朋友可以參考下。
    2017-01-01
  • Java中if...else語句使用的學(xué)習(xí)教程

    Java中if...else語句使用的學(xué)習(xí)教程

    這篇文章主要介紹了Java中if...else語句使用的學(xué)習(xí)教程,是Java入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-11-11
  • Springboot整合Swagger2和Swagger3全過程

    Springboot整合Swagger2和Swagger3全過程

    這篇文章主要介紹了Springboot整合Swagger2和Swagger3全過程,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07

最新評論

高雄市| 麻江县| 永城市| 青铜峡市| 诏安县| 内乡县| 新田县| 万山特区| 张家口市| 汪清县| 穆棱市| 壶关县| 密云县| 大洼县| 大兴区| 和政县| 宜良县| 玉林市| 洪泽县| 龙井市| 伊宁市| 海口市| 白山市| 渭源县| 宜阳县| 淮北市| 铁岭县| 青川县| 额济纳旗| 平顺县| 宣恩县| 汾阳市| 沾益县| 龙井市| 德昌县| 沽源县| 万安县| 板桥市| 正镶白旗| 四川省| 芷江|