程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Java中Map的排序成績詳解

Java中Map的排序成績詳解

編輯:關於JAVA

Java中Map的排序成績詳解。本站提示廣大學習愛好者:(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<Integer, Integer> treeMap = new TreeMap<>(new Comparator<Integer>() {
      @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<Integer, Integer> 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<Entry<>>便可以完成排序
將排好序的元素再拔出到LinkedMap中

代碼完成以下:

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

    //重寫比擬函數
    Collections.sort(cache,new Comparator<Map.Entry<Integer, Integer>>() {
      @Override
      public int compare(Entry<Integer, Integer> o1, Entry<Integer, Integer> o2) {
        //若前往值小於0,則o1在o2後面
        return o2.getValue()-o1.getValue();
      }
    });

    Map<Integer, Integer> 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
*/

如許,按值排序和按鍵排序就都可以完成了。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved