程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> java若何對map停止排序詳解(map聚集的應用)

java若何對map停止排序詳解(map聚集的應用)

編輯:關於JAVA

java若何對map停止排序詳解(map聚集的應用)。本站提示廣大學習愛好者:(java若何對map停止排序詳解(map聚集的應用))文章只能為提供參考,不一定能成為您想要的結果。以下是java若何對map停止排序詳解(map聚集的應用)正文


明天做統計時須要對X軸的地域依照地域代碼(areaCode)停止排序,因為在構建XMLData應用的map來停止數據統計的,所以在統計進程中就須要對map停止排序。

1、簡略引見Map

在講授Map排序之前,我們先來略微懂得下map。map是鍵值對的聚集接口,它的完成類重要包含:HashMap,TreeMap,Hashtable和LinkedHashMap等。個中這四者的差別以下(簡略引見):

HashMap:我們最經常使用的Map,它依據key的HashCode 值來存儲數據,依據key可以直接獲得它的Value,同時它具有很快的拜訪速度。HashMap最多只許可一筆記錄的key值為Null(多條會籠罩);許可多筆記錄的Value為 Null。非同步的。

TreeMap: 可以或許把它保留的記載依據key排序,默許是按升序排序,也能夠指定排序的比擬器,當用Iterator 遍歷TreeMap時,獲得的記載是排過序的。TreeMap不許可key的值為null。非同步的。

Hashtable: 與 HashMap相似,分歧的是:key和value的值均不許可為null;它支撐線程的同步,即任一時辰只要一個線程能寫Hashtable,是以也招致了Hashtale在寫入時會比擬慢。

LinkedHashMap: 保留了記載的拔出次序,在用Iterator遍歷LinkedHashMap時,先獲得的記載確定是先拔出的.在遍歷的時刻會比HashMap慢。key和value均許可為空,非同步的。

 

2、Map排序

TreeMap

TreeMap默許是升序的,假如我們須要轉變排序方法,則須要應用比擬器:Comparator。

Comparator可以對聚集對象或許數組停止排序的比擬器接口,完成該接口的public compare(T o1,To2)辦法便可完成排序,該辦法重要是依據第一個參數o1,小於、等於或許年夜於o2分離前往負整數、0或許正整數。以下:


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

運轉成果以下:

d:ddddd
c:ccccc
b:bbbbb
a:aaaaa

下面例子是對依據TreeMap的key值來停止排序的,然則有時我們須要依據TreeMap的value來停止排序。對value排序我們就須要借助於Collections的sort(List<T> list, Comparator<? super T> c)辦法,該辦法依據指定比擬器發生的次序對指定列表停止排序。然則有一個條件前提,那就是一切的元素都必需可以或許依據所供給的比擬器來停止比擬。以下:


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()轉換成list
        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());
          }
    }
}


運轉成果

a:aaaaa
b:bbbbb
c:ccccc
d:ddddd

HashMap

我們都是HashMap的值是沒有次序的,他是依照key的HashCode來完成的。關於這個無序的HashMap我們要怎樣來完成排序呢?參照TreeMap的value排序,我們一樣的也能夠完成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());
          }
     }
}

運轉成果

a:aaaaa
b:bbbbb
c:ccccc
d:ddddd

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