亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

map實現類有哪些

發布時間:2020-10-15 17:29:28 來源:億速云 閱讀:196 作者:小新 欄目:編程語言

這篇文章主要介紹了map實現類有哪些,具有一定借鑒價值,需要的朋友可以參考下。希望大家閱讀完這篇文章后大有收獲。下面讓小編帶著大家一起了解一下。

 map是鍵值對的集合接口,它的實現類主要包括:HashMap,TreeMap,Hashtable以及LinkedHashMap等。其中這四者的區別如下:

HashMap:我們最常用的Map,HashMap的值是沒有順序的,他是按照key的HashCode來實現的,就是根據key的HashCode 值來存儲數據,根據key可以直接獲取它的Value,同時它具有很快的訪問速度。HashMap最多只允許一條記錄的key值為Null(多條會覆蓋);允許多條記錄的Value為 Null。非同步的。

TreeMap: 能夠把它保存的記錄根據key排序,默認是按升序排序,也可以指定排序的比較器,當用Iterator 遍歷TreeMap時,得到的記錄是排過序的。TreeMap不允許key的值為null。非同步的。

Hashtable: 與 HashMap類似,不同的是:key和value的值均不允許為null;它支持線程的同步,即任一時刻只有一個線程能寫Hashtable,因此也導致了Hashtale在寫入時會比較慢,只有hashtable是繼承自Dictionary抽象類的,hashMap和treeMap都繼承自AbstractMap抽象類,LinkedHashMap繼承自hashMap。

LinkedHashMap: 保存了記錄的插入順序,在用Iterator遍歷LinkedHashMap時,先得到的記錄肯定是先插入的.在遍歷的時候會比HashMap慢。key和value均允許為空,非同步的。

常識:

Collection與Map集合是不是繼承自Object?

不是,兩個都是接口,Object是類,怎么可能會繼承自Object,詳細看java.util下的具體接口。

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

上面例子是對根據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()); 
          } 
    }
}

我們都是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()); 
          } 
     }
}

感謝你能夠認真閱讀完這篇文章,希望小編分享map實現類有哪些內容對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,遇到問題就找億速云,詳細的解決方法等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

商河县| 鲁甸县| 通州市| 修水县| 宜城市| 潼南县| 犍为县| 郯城县| 五寨县| 赤峰市| 广南县| 偃师市| 甘德县| 新兴县| 遵化市| 临澧县| 桃园县| 金山区| 纳雍县| 望奎县| 阳春市| 弥勒县| 五家渠市| 桂东县| 松桃| 晋城| 青冈县| 东安县| 伊宁市| 高密市| 包头市| 商都县| 武乡县| 洛浦县| 镇原县| 缙云县| 高邑县| 靖远县| 札达县| 武汉市| 文水县|