大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專(zhuān)注Java教育14年 全國(guó)咨詢/投訴熱線:400-8080-105
動(dòng)力節(jié)點(diǎn)LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁(yè) hot資訊 HashMap按鍵排序和按值排序

HashMap按鍵排序和按值排序

更新時(shí)間:2021-07-12 16:55:09 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽879次

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

1.簡(jiǎn)單介紹Map

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

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

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

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

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

2.Map排序

TreeMap

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

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

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

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

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());
        //然后通過(guò)比較器來(lái)實(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

3.HashMap

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

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

以上就是動(dòng)力節(jié)點(diǎn)小編介紹的"HashMap按鍵排序和按值排序",希望對(duì)大家有幫助,想了解更多可查看Java基礎(chǔ)教程,如有疑問(wèn),請(qǐng)?jiān)诰€咨詢,有專(zhuān)業(yè)老師隨時(shí)為您服務(wù)。

提交申請(qǐng)后,顧問(wèn)老師會(huì)電話與您溝通安排學(xué)習(xí)

  • 全國(guó)校區(qū) 2025-10-10 搶座中
免費(fèi)課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 天天狠狠弄夜夜狠狠躁·太爽了 | 午夜大片免费男女爽爽影院久久 | 国产香蕉免费精品视频 | 黄色在线视频网 | 国产中文字幕视频 | 99精品国产成人一区二区 | 国产色在线 | 久热精品视频在线观看 | 天堂成人av| 国产区一区 | 全部无卡免费的毛片在线看 | 韩国xxxx色视频在线观看 | 天天操精品视频 | 国产成人教育视频在线观看 | 色88888久久久久久影院 | 狠狠色噜噜狠狠狠狠五月婷 | 亚洲经典在线中文字幕 | 免费视频精品一区二区 | 哪个网站能看毛片 | 国产精品久久做爰 | 免费爱爱片 | 日本美女久久 | 精品外国呦系列在线观看 | 国产精品女在线观看 | 999精品在线视频 | 欧美日韩国产在线成人网 | a毛片a毛片a视频 | 久久精品站| 国产精品线在线精品 | 久久97精品久久久久久清纯 | 狠狠久久久久久亚洲综合网 | 五月天婷婷缴情五月免费观看 | 国产成人乱码一区二区三区在线 | 不卡中文字幕 | 久久久久久免费观看 | 麻豆国内精品欧美在线 | 高清国产性色视频在线 | 精品欧美一区二区在线观看 | 男人都懂的网址 | 国产在线播放成人免费 | 日韩中文字幕视频 |