日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java map 自动排序_Java中Map的排序

發布時間:2024/3/26 java 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java map 自动排序_Java中Map的排序 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Map的種類

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

HashMap:

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

LinkedHashMap

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

TreeMap

實現SortMap接口,能夠把它保存的記錄根據鍵排序,默認是按鍵值的升序排序,也可以指定排序的比較器,當用Iterator 遍歷TreeMap時,得到的記錄是排過序的。

按鍵排序

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

private static void sort_by_key(){

Map treeMap = new TreeMap<>(new Comparator() {

@Override

public int compare(Integer o1, Integer o2) {

return o2-o1; //倒序.這里說明一下,如果返回負值,則o1先輸出,反之則o2

}

});

//填充數據

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));

}

}

/* 結果如下:

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轉一下。

按值排序

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

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

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

那么使用List>就可以實現排序

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

代碼實現如下:

private static Map sortMap(Map linkedMap) {

List> cache = new ArrayList<>(linkedMap.entrySet());

//重寫比較函數

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<>();

//將結果插入LinkedMap然后返回

for(int i = 0; i < cache.size();i++){

resultMap.put(cache.get(i).getKey(), cache.get(i).getValue());

}

return resultMap;

}

/*結果:

7965 9966

1067 9963

1720 9833

3257 9738

3934 9578

777 9348

1924 9315

3472 9270

3649 9114

5892 9078

*/

這樣,按值排序和按鍵排序就都可以實現了。

總結

以上是生活随笔為你收集整理的java map 自动排序_Java中Map的排序的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。