Java開發知識之Java中的Map結構


           Java開發知識之Java中的Map結構

一丶Map接口

  Map沒有實現Collection接口,提供的是Key 到Value的映射. Map中.不能包含相同的Key,每個Key只能映射一個Value的值. 相當於就是 一一對應關系. 比如你有老婆,你是老公, 一個老公只能有一個老婆(在中國^_^),Kery還決定了存儲對象在映射中的存儲位置.但不是由Key對象本身決定的.而是一種散列技術進行處理.產生一個散列碼的證書值.簡單來說就是通過一串算法.算出的一個不會相同的值.

Map接口,mao不可以存儲重復元素.所以我們直接看下方法.

常用方法:

  

Map我們可以看成一張表.所以理解這方方法就很簡單了

存放 put 給一個 Key的值. 再給一個Value的值. 可以是泛型存儲.

containsKey(object Key)傳入一個Key判斷這個Key是否在這個表里面.

containsValue 同上.

get(key): 傳入一個key值.返回這個key對應的value值. 否則返回NUll

keySet(); 這個有點重要.就是將集合中的key對象.變成一個Set集合存儲.可以進行遍歷Key值.

Values(): 返回這個集合中所有值對象的 conllection集合.

Map的典型應用.轉為 Set進行遍歷Key以及對應Values值.

    public static void main(String[] args) throws MyException {
        
        Map<String,Integer> map = new HashMap<>();
        map.put("張三", 1);
        map.put("張三", 1);
        map.put("李四", 1);
        map.put("王五", 1); //key不同,Value值相同.因為key相同的張三.所以不會存儲在hash表中.
        //遍歷Key值
        IterKey(map);
        //遍歷Value值.
        IterValue(map);


    }
    private static void IterValue(Map<String,Integer>map) {
        System.out.println("遍歷Values的值");
        Collection<Integer> value = map.values(); //轉化為Collection接口類型
        java.util.Iterator<Integer> it = value.iterator();
        while(it.hasNext()) {
            Integer i = (Integer)it.next();
            //轉換為字符串輸出
            String str = i.toString();
            System.out.print(" " + str);
        }
        System.out.println();
        
    }

    private static void IterKey(Map<String, Integer> map) {
        System.out.println("遍歷Key里面所有的方法");
        Set<String> key = map.keySet();
        java.util.Iterator<String> it = key.iterator();
        while(it.hasNext()) {
            String str = (String)it.next();
            System.out.print(" " + str);
        
        }
        System.out.println();
    }
    

我們要用子類去實例化.也就是HashMap()

上面分別遍歷了Map表中的Key以及Value的值. 需要進行轉換. Key轉換為Set集合. Value轉換為Collection接口就可以了.

二丶Map接口以及子類.

  Map接口有自己的兩個子類. 

分別是

1.HashMap類.

2.TreeMap類.

各自不同的特點

  HashMap類:

HashMap類是基於哈希表的Map接口的實現.此實現提供所有的可選的映射操作.並且勻速使用null值跟建. 但必須保證key值得唯一性才可以. HashMap通過哈希表對其內部的映射關系進行快速查找.此類不保證映射的順序.特別是他不會保證順序是恆久不變的.

  TreeMap:

TreeMap類不僅實現了Map接口. 還是先了java.util.SortdMap接口,因此集合中的映射關系有一定得順序.但是在添加跟刪除定位映射關系的時候.TreeMap比HashMap類性能稍差.因為有順序排列的.所有key值不能為Null

代碼其不同 

 

public static void main(String[] args) throws MyException {
        
        Map<String,Integer> map = new HashMap<>();
        map.put("張三", 1);
        map.put("張三", 2);
        map.put("李四", 4);
        map.put("王五", 5); //key不同,Value值相同.因為key相同的張三.所以不會存儲在hash表中.
        //遍歷Key值
        IterKey(map);
        //遍歷Value值.
        IterValue(map);
        
        Map<String,Integer> treeMaps = new TreeMap<>();
        treeMaps.putAll(map);
        //遍歷treeMap以及值.跟上面一樣.
        IterKey(treeMaps);
        IterValue(treeMaps);


    }

輸出結果

一個是有序,一個是無序的.

三丶總結

  1.map 使用的是映射關系 key value 添加時put方法. 刪除是 remove,

  2.map的遍歷如果遍歷key 要使用KeySet方法轉為Set集合.進行遍歷. 如果是value 在使用Collection接口 使用方法values返回. 進行遍歷

  3.hashMap不保證順序, key可以為null但是不能重復. TreeMap可以保證順序,但是key不能為Null

  4.注意map轉為Set以及Colliection轉換.以及迭代.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM