国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
針對java.util.Map的Value做排序
 
針對java.util.Map的Value做排序(1)
 
如何將java.util.Map依照其Value值來做排序(由大至?。┠??

Map的特性:
    Map內(nèi)涵資料是Key -> Value的架構(gòu)集合體,而Key是屬於Set的架構(gòu)集合體,也就是說Key的值是唯一的,而Value的值可以重複。一般常用的物件是HashMap或TreeMap,如果考慮效能的話,建議使用HashMap,如果希望Key值有順序性,就使用TreeMap吧!所以Map的集合體,資料的擺放方式是沒有順序性的,我們需要借助有順序性的集合體List來幫忙。

範(fàn)例資料如下定義:
Map<String, Integer> map_Data = new HashMap<String, Integer>();
map_Data.put("A", 98);
map_Data.put("B", 50);
map_Data.put("C", 76);
map_Data.put("D", 23);
map_Data.put("E", 85);
System.out.println(map_Data);

現(xiàn)在將Map集合體轉(zhuǎn)換成List集合體,而List物件使用ArrayList來實(shí)做如下:
//將map_Data由Map型態(tài)轉(zhuǎn)成List型態(tài)的list_Data,以便進(jìn)行排序
List<Map.Entry<String, Integer>> list_Data = new ArrayList<Map.Entry<String, Integer>>(map_Data.entrySet());

透過Collections.sort(List l, Comparator c)方法來做排序的動作,由傳入?yún)?shù)可以了解List l就是要排序的資料結(jié)構(gòu)體,另外還需要一個(gè)Comparator c物件,此物件是用來評估List l中的任兩物件的大小值,實(shí)做如下:
//排序
Collections.sort(list_Data, new Comparator<Map.Entry<String, Integer>>()

    public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2)
    {
        return (o2.getValue() - o1.getValue());
    }
});
上方的Comparator c參數(shù)是使用匿名類別的方式來實(shí)做的。

所以排序完成的資料內(nèi)容在list_Data這個(gè)物件中,將其印出來看結(jié)果:
System.out.println(list_Data);
 


針對java.util.Map的Value做排序(2)

上一篇介紹的Value資料型態(tài)是Integer,那Double型態(tài)怎麼做呢?

因java.util.Comparator這個(gè)interface(介面)的compare方法,其回傳型態(tài)只有整數(shù)型態(tài),定義如下:
int compare(java.lang.Object o1, java.lang.Object o2)

範(fàn)例資料改成如下: 
Map<String, Double> map_Data = new HashMap<String, Double>();
map_Data.put("A", 98.89);
map_Data.put("B", 50.777);
map_Data.put("C", 76.566);
map_Data.put("D", 23.001);
map_Data.put("E", 23.899);

參照 針對java.util.Map的Value做排序(1) 的例子,除了資料型態(tài)由Integer改成Double之外,最重要的地方在紅色字體部份,如下標(biāo)示:
//排序
Collections.sort(list_Data, new Comparator<Map.Entry<String, Double>>()

    public int compare(Map.Entry<String, Double> o1, Map.Entry<String, Double> o2)
    {
        return (o2.getValue() - o1.getValue());
    }
});

因?yàn)閏ompare方法只能回傳int型態(tài),所以將紅色字體的結(jié)果強(qiáng)制轉(zhuǎn)形成int型態(tài),語法如下:
return (int)(o2.getValue() - o1.getValue());

這樣做會發(fā)生一個(gè)問題,注意資料中("D", 23.001)、("E", 23.899),這兩筆資料在強(qiáng)制轉(zhuǎn)型後,都是23,沒有辦法準(zhǔn)確反映出浮點(diǎn)數(shù)的部份,解決方法不難,先確定要取得的小數(shù)點(diǎn)位數(shù)是多少,像此範(fàn)例剛好都是小數(shù)點(diǎn)三位,那就取到小數(shù)點(diǎn)三位,再強(qiáng)制轉(zhuǎn)成整數(shù),這樣就可以排出正確大小了。程式碼修改如下:
return (int)((o2.getValue() - o1.getValue()) * 1000.0);
 
 
(#)
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
遍歷map
[轉(zhuǎn)]另一種遍歷Map的方式:Map.Entry和Map.entrySet()
Problem 1002
Java 遍歷Map時(shí) 刪除元素
HanLP自然語言處理包初步安裝與使用
HashMap 排序按照 key 和 value
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服