【javase複習】## day9 Map接口 ##

Map接口

List 和Set都是單例數據集合
成對的數據則麼辦?

所以有 雙例集合!!

Map接口!

實現類存儲的都是鍵值對: 鍵不可重複,值可以重複

————–Map
———————HashMap
———————TreeMap
———————HashTable

Map接口的方法:

    添加:
        put(K key, V value)//返回之前與這個鍵關聯的值  如果之前沒有就返回null
        putAll(Map<? extends K,? extends V> m) 

    刪除
        remove(Object key) //根據鍵刪除,返回的是值 如果沒有 則返回null
        clear() 

    獲取:
        get(Object key) 
        size() 

    判斷:
        containsKey(Object key) 
        containsValue(Object value) 
        isEmpty() 
    迭代:
        keySet() 
        values() 
        entrySet() 



這裏重點記錄一下迭代方法!!

迭代:
        keySet()   //返回映射中包含鍵的Set視圖
        values()   //返回映射中包含值的Collection視圖
        entrySet() //將鍵值自定義成Entry類,返回這個類的Set視圖

如何迭代遍歷呢??

① 用keySet方法返回所有鍵的Set,然後遍歷Set的同時取出對應的值:
只有鍵。。。還要自己再一個個查出值。。麻煩

public class rrr {
    public static void main(String[] args) {
        Map<String,String> m = new HashMap<String,String>();
         m.put("周", "老婆");
         m.put("駱", "老公");
         m.put("鍾漢良", "老公");
         Set<String> keys = m.keySet();   //把所有的鍵存儲到一個Set集合返回
         Iterator<String> it  =keys.iterator();
         while(it.hasNext()){
             String key =it.next();
             String value = m.get(key);
             System.out.println("鍵"+key+"所對應的值是"+value);
         }

    }

}

鍵駱所對應的值是老公
鍵周所對應的值是老婆
鍵鍾漢良所對應的值是老公





② 使用values方法進行遍歷。。 只有值,沒有鍵

public class rrr {
    public static void main(String[] args) {
        Map<String,String> m = new HashMap<String,String>();
         m.put("周", "老婆");
         m.put("駱", "老公");
         m.put("鍾漢良", "老公");
         Collection<String> c =m.values();
         Iterator<String> it = c.iterator();
         while(it.hasNext())
             System.out.println(it.next());

    }

}
老公
老婆
老公





③ 用entrySet方法返回一個Set,該Set中存儲的是一個自定義類,包含key和value兩個屬性。
其實:Entry是map裏的靜態內部類

class Map{

    //靜態內部類 
    static class Entry<K ,V>{
        K  key;

        V value;

    } 

}





public class rrr {
    public static void main(String[] args) {
        Map<String,String> m = new HashMap<String,String>();
         m.put("周", "老婆");
         m.put("駱", "老公");
         m.put("鍾漢良", "老公");
         Set<Entry<String,String>> s =m.entrySet();
         Iterator<Entry<String,String>> it = s.iterator();
         while(it.hasNext())
             System.out.println(it.next());

    }

}
=老公
周=老婆
鍾漢良=老公




實現類HashMap

原理: 跟HashSet一樣, 都是維護了一個哈希表。

添加時 ①首先根據hashCode方法確定位置
②如果那個位置不存在元素就直接放入
③如果那個位置存在元素就調用equals方法判斷是否相同,如果不相同就放進去,如果相同,就更新替換掉原先鍵值對的值!!!







實現類TreeMap

底層依賴紅黑樹實現: 對元素的鍵進行排序存儲

排序特性跟TreeSet一樣~~

注意: 如果鍵比較相同 , 則只替換值!!







實現類HashTable

JDK1.0
跟HashTable一樣, 線程安全效率低

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章