8. Map 接口

8. Map  接口

1.1 特徵
是一組成對的鍵-值對象,即所持有的是key-value 對。Map中不能有重複的key,擁有自己的內部排列機制
1.2 方法
void clear()
boolean containsKey(Object  k)
boolean containsValue(Object v)
Set entrySet()
boolean equals(Object obj)
Object get(Object k)
int hashCode()
boolean isEmpty()
Set keySet()
Object put(Object k, Object v)
void putAll(Map m)
Object remove(Object k)
int size()
Collection values()
1.3 Map  實現類
HashMap 以哈希表數據結構實現,查找對象時通過哈希函數計算其位置,它是爲快速查詢而設計的,其內部定義了一個hash表數組(Entry[] table),元素會通過哈希轉換函數將元素的哈希地址轉換成數組中存放的索引,如果有衝突,則使用散列鏈表的形式將所有相同哈希地址的元素串起來,可能通過查看HashMap.Entry的源碼它是一個單鏈表結構。
TreeMap 鍵以某種排序規則排序,內部以red-black(紅-黑)樹數據結構實現,實現了SortedMap接口
Hashtable 也是以哈希表數據結構實現的,解決衝突時與HashMap也一樣也是採用了散列鏈表的形式,不過性能比HashMap要低。

1.4 對map的選擇
1)Hashtable和HashMap的效率大致相同(通常HashMap更快一點,所以HashMap有意取代Hashtable)。
2)TreeMap通常比HashMap慢,因爲要維護排序。
3)HashMap正是爲快速查詢而設計的。
4)LinkedHashMap比HashMap慢一點,因爲它維護散列數據結構的同時還要維護鏈表。
1.5 實例
public class Test {
    public static void main(String[] args) {
        test2();
    }
    
    static void test1(){
        HashMap<String,String> hm = new HashMap<String,String>();
        hm.put("1", "Android");
        hm.put("2","iOS");
        hm.put("3", "WP");
        hm.put("4", "WP");
        String v1 = hm.get("1");
        System.out.println(v1);
        
        Set<String> keys = hm.keySet();
        for(String key : keys){
            String value = hm.get(key);
            System.out.println(key+":"+value);
        }
    }
    
    static void test2(){
        TreeMap<String,String> tm = new TreeMap<String,String>();
        tm.put("3", "WP");
        tm.put("4", "WP");
        tm.put("1", "Android");
        tm.put("2","iOS");
        System.out.println(tm);
    }
}

原文出處:http://geek99.com/node/452#

該博客教程視頻地址:http://geek99.com/node/1648

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