成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Java中Map的排序

pkhope / 870人閱讀

摘要:的種類在中,的主要作用是存儲鍵值對。保存了記錄的插入順序,在用遍歷時,先得到的記錄肯定是先插入的也可以在構(gòu)造時用帶參數(shù),按照應(yīng)用次數(shù)排序。按值排序由于中并沒有此功能,所以我們需要自己實現(xiàn)。思路如下中是可以使用接口的。

Map的種類

在Java中,Map的主要作用是存儲鍵值對。由于是根據(jù)鍵得到值,所以不允許鍵重復(fù)。它主要有如下幾個類別:

HashMap:
最常用的Map,它根據(jù)鍵的HashCode值存儲數(shù)據(jù),根據(jù)鍵可以直接獲取它的值,具有很快的訪問速度,遍歷時,取得數(shù)據(jù)的順序是完全隨機的。HashMap最多只允許一條記錄的鍵為Null;允許多條記錄的值為Null;HashMap不支持線程的同步,即任一時刻可以有多個線程同時寫HashMap;可能會導(dǎo)致數(shù)據(jù)的不一致。如果需要同步,可以用Collections的synchronizedMap方法使HashMap具有同步的能力,或者使用ConcurrentHashMap。Hashtable與HashMap類似,它繼承自Dictionary類,不同的是:它不允許記錄的鍵或者值為空;它支持線程的同步,即任一時刻只有一個線程能寫Hashtable,因此也導(dǎo)致了 Hashtable在寫入時會比較慢。

LinkedHashMap
保存了記錄的插入順序,在用Iterator遍歷LinkedHashMap時,先得到的記錄肯定是先插入的.也可以在構(gòu)造時用帶參數(shù),按照應(yīng)用次數(shù)排序。在遍歷的時候會比HashMap慢,不過有種情況例外,當(dāng)HashMap容量很大,實際數(shù)據(jù)較少時,遍歷起來可能會比LinkedHashMap慢,因為LinkedHashMap的遍歷速度只和實際數(shù)據(jù)有關(guān),和容量無關(guān),而HashMap的遍歷速度和他的容量有關(guān)。

TreeMap
實現(xiàn)SortMap接口,能夠把它保存的記錄根據(jù)鍵排序,默認(rèn)是按鍵值的升序排序,也可以指定排序的比較器,當(dāng)用Iterator 遍歷TreeMap時,得到的記錄是排過序的。

按鍵排序

從上面Map的種類介紹我們可以看出,TreeMap是自帶按鍵排序的功能的,只需要在創(chuàng)建的時候同時實現(xiàn)一個Compare的接口就可以了,例子如下:

private static void sort_by_key(){
        Map treeMap = new TreeMap<>(new Comparator() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return o2-o1;  //倒序.這里說明一下,如果返回負(fù)值,則o1先輸出,反之則o2
            }
        });
        
        //填充數(shù)據(jù)
        for(int i = 0; i < 100;i++){
            int key = (int)(10000*Math.random());
            int value = (int)(10000*Math.random());
            treeMap.put(key, value);
        }
        outMap(treeMap);
    }

public static void outMap(Map map){
        for(Integer integer:map.keySet()){
            System.out.println("key="+integer+"   value="+map.get(integer));
        }
}
/* 結(jié)果如下:
key=9977   value=80
key=9684   value=7108
key=9422   value=1706
key=9264   value=1210
key=9248   value=4758
key=9024   value=7048
key=8892   value=3124
key=8879   value=6414
key=8814   value=8171
key=8728   value=1538
key=8513   value=4956
key=8462   value=5617
key=8355   value=8912
*/

從上面可以看出,按鍵排序是不難的,而安置排序就比較麻煩一些,需要將Map轉(zhuǎn)一下。

按值排序

由于Java中Map并沒有此功能,所以我們需要自己實現(xiàn)。思路如下:

Java中List是可以使用compare接口的。

Map實際上就是Entry<>的集合

那么使用List>就可以實現(xiàn)排序

將排好序的元素再插入到LinkedMap中

代碼實現(xiàn)如下:

    private static Map sortMap(Map linkedMap) {
        
        List> cache = new ArrayList<>(linkedMap.entrySet());

        //重寫比較函數(shù)
        Collections.sort(cache,new Comparator>() {
            @Override
            public int compare(Entry o1, Entry o2) {
                //若返回值小于0,則o1在o2前面
                return o2.getValue()-o1.getValue();
            }
        });

        Map resultMap = new LinkedHashMap<>();
        //將結(jié)果插入LinkedMap然后返回
        for(int i = 0; i < cache.size();i++){
            resultMap.put(cache.get(i).getKey(), cache.get(i).getValue());
        }
        return resultMap;
    }
/*結(jié)果:
7965   9966
1067   9963
1720   9833
3257   9738
3934   9578
777   9348
1924   9315
3472   9270
3649   9114
5892   9078
*/

這樣,按值排序和按鍵排序就都可以實現(xiàn)了。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/65410.html

相關(guān)文章

  • Java集合框架——Map接口

    摘要:第三階段常見對象的學(xué)習(xí)集合框架集合在實際需求中,我們常常會遇到這樣的問題,在諸多的數(shù)據(jù)中,通過其編號來尋找某一些信息,從而進行查看或者修改,例如通過學(xué)號查詢學(xué)生信息。面試題和的區(qū)別是單列集合的頂層接口,有子接口和。 第三階段 JAVA常見對象的學(xué)習(xí) 集合框架——Map集合 showImg(https://segmentfault.com/img/remote/1460000019683...

    princekin 評論0 收藏0
  • Java? 教程(集合接口)

    集合接口 核心集合接口封裝了不同類型的集合,如下圖所示,這些接口允許獨立于其表示的細(xì)節(jié)來操縱集合,核心集合接口是Java集合框架的基礎(chǔ),如下圖所示,核心集合接口形成層次結(jié)構(gòu)。 showImg(https://segmentfault.com/img/bVbntJW?w=402&h=146); Set是一種特殊的Collection,SortedSet是一種特殊的Set,依此類推,另請注意,層次結(jié)構(gòu)...

    elisa.yang 評論0 收藏0
  • Java Map按Key值進行排序

    摘要:對利用排序讓按進行排序?qū)崿F(xiàn)一個比較器類從小到大排序輸出結(jié)果 package com.cute.test;import java.util.Comparator;import java.util.Map;import java.util.TreeMap;public class SortMapTest { public s...

    不知名網(wǎng)友 評論0 收藏0
  • java-list-map-set 學(xué)習(xí)記錄

    摘要:集合類類型解釋的父類集集合中的元素不按特定方式排序,并且沒有重復(fù)對象。他的有些實現(xiàn)類能對集合中的鍵對象進行排序。 集合類 2017-07-10 22:24:57 blog site https://github.com/Fiz1994 類型解釋: Collection : Set,List 的父類 Set(集):集合中的元素不按特定方式排序,并且沒有重復(fù)對象。他的有些實現(xiàn)類能對集合中的...

    stackvoid 評論0 收藏0
  • java 鍵值對 按值排序

    摘要:在最近寫程序題的時候,需要存儲一個為為的后來需要根據(jù)的長度對從小到大進行排序。用代替,然后中的元素為配對類,變相實現(xiàn)了一個鍵對應(yīng)一個值的集合,并且能夠排序。 在最近寫程序題的時候,需要存儲一個key為char,value為string的map,后來需要根據(jù)string的長度對map從小到大進行排序。 showImg(https://segmentfault.com/img/bVbiZz...

    Moxmi 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<