【Java類集】_Map介面筆記(執行個體親測)

來源:互聯網
上載者:User

【Java類集】_Map介面筆記

掌握Map介面與Collection介面不同
掌握Map與Map.Entry介面的關係
掌握Map介面的常用子類:HashMap、HashTable、TreeMap、WeekHashMap
掌握HashMap與HashTable的區別

3、具體內容

Collection的操作中之前已經發現,每次儲存對象都一個對象,但是在Map中儲存是的一對對象,對象的形式是以:key->value的形式儲存的。
就好像電話本:張三->123456

Map介面中的方法

No.    方法或類                    類型    描述
1    public void clear()                普通    清空Map集合
2    public boolean containsKey(Object key)        普通    判斷指定的key是否存在
3    public boolean containsValue(Object value)    普通    判斷指定的value是否存在
4    public Set<Map.Entry<K,V>> entrySet()        普通    將Map對象變為Set集合
5    public boolean equals(Object o)            普通    對象比較
6    public V get(Object K)                普通    根據key獲得value
7    public int hashCode()                普通    返回雜湊碼
8    public boolean isEmpty()            普通    判斷集合是否為空白
9    public Set<K> keySet()                普通    取得所有的key
10    public V put(K key,V value)            普通    向集合中加入元素
11    public void putAll(Map<? extends K,extends V> t)普通    將一個Map集合中的內容加入到別一個Map
12    public V remove(Object key)            普通    根據key刪除value
13    public int size()                普通    取得集合長度
14    public Collection<V> values()            普通    取得全部的value

Map介面的常用子類:
HashMap:無序存放的,是新的操作類,key不允許重複。
Hashtable:無序存放的,是舊的操作類,key不允許重複。
TreeMap:可以排序的Map集合,按集合中的key排序,key不允許重複。
WeakHashMap:弱引用的Map集合,當集合中的某些內容不再使用時,可以清楚掉無用的資料,可以使用gc進行回收。
IdentityHashMap:key可以重複的Map集合。

Map與Map.entry的關係:

以HashMap為例,說明Map的基本方法的操作。

import java.util.HashMap;import java.util.Map;public class HashMapDemo01{    public static void main(String[] args){        Map<String,String> map = null;        map = new HashMap<String,String>();        map.put("mldn","www.mldn.cn");        map.put("zhinangtuan","www.zhinangtuan.cn");        map.put("mldnjava","www.mldnjava.cn");        String val = map.get("mldn");        System.out.println("取出的內容是:"+val);    }}

輸出:取出的內容是:www.mldn.cn

在map中也可以使用containsXxx()方法判斷指定的key或者value是否存在。

import java.util.HashMap;import java.util.Map;public class HashMapDemo02{    public static void main(String[] args){        Map<String,String> map = null;        map = new HashMap<String,String>();        map.put("mldn","www.mldn.cn");        map.put("zhinangtuan","www.zhinangtuan.cn");        map.put("mldnjava","www.mldnjava.cn");        if(map.containsKey("mldn")){            System.out.println("搜尋的key存在!");        }else{            System.out.println("搜尋的key不存在!");        }        if(map.containsValue("www.mldn.cn")){    //判斷value是否存在            System.out.println("搜尋的value存在!");        }else{            System.out.println("搜尋的value不存在!");        }        }}

輸出:
搜尋的key存在!
搜尋的value存在!

如果現在想輸出全部的key,則使用如下方法:
Set<K> keySet()

import java.util.HashMap;import java.util.Map;import java.util.Iterator;import java.util.Set;public class HashMapDemo03{    public static void main(String[] args){        Map<String,String> map = null;        map = new HashMap<String,String>();        map.put("mldn","www.mldn.cn");        map.put("zhinangtuan","www.zhinangtuan.cn");        map.put("mldnjava","www.mldnjava.cn");        Set<String> keys = map.keySet();        Iterator<String> iter = keys.iterator();        while(iter.hasNext()){            String str = iter.next();            System.out.print(str+"、");        }    }}

輸出:

zhinangtuan、mldn、mldnjava、

既然可以輸出全部的key,那麼就肯定可以輸出全部的value
    Collection<V> values()

import java.util.HashMap;import java.util.Map;import java.util.Iterator;import java.util.Collection;public class HashMapDemo04{    public static void main(String[] args){        Map<String,String> map = null;        map = new HashMap<String,String>();        map.put("mldn","www.mldn.cn");        map.put("zhinangtuan","www.zhinangtuan.cn");        map.put("mldnjava","www.mldnjava.cn");        Collection<String> keys = map.values();        Iterator<String> iter = keys.iterator();        while(iter.hasNext()){            String str = iter.next();            System.out.print(str+"、");        }    }}

輸出:www.zhinangtuan.cn、www.mldn.cn、www.mldnjava.cn、

在Map中也存在一個Hashtable子類,實際上這個子類的推出時間與Vector是一樣的,都屬於舊類。

import java.util.Hashtable;import java.util.Map;import java.util.Iterator;import java.util.Set;import java.util.Collection;public class HashtableDemo01{    public static void main(String[] args){        Map<String,String> map = null;        map = new Hashtable<String,String>();        map.put("mldn","www.mldn.cn");        map.put("zhinangtuan","www.zhinangtuan.cn");        map.put("mldnjava","www.mldnjava.cn");        Set<String> keys = map.keySet();        Iterator<String> iter = keys.iterator();        while(iter.hasNext()){            String str = iter.next();            System.out.print(str+"、");        }        System.out.println("");        Collection<String> values = map.values();        Iterator<String> iterv = values.iterator();        while(iterv.hasNext()){            String str = iterv.next();            System.out.print(str+"、");        }    }}

輸出:

mldn、mldnjava、zhinangtuan、
www.mldn.cn、www.mldnjava.cn、www.zhinangtuan.cn、

HashMap與Hashtable的區別
No.    比較點        HashMap                Hashtable
1    推出時間    JDK1.2之後推出,屬於新的操作類    JDK1.0推出,屬於舊的操作類        
2    效能        採用非同步處理方式,效能更高    採用同步處理方式,效能較低
3    安全執行緒    屬於非安全執行緒的操作類        屬於安全執行緒的操作類

在Map中還存在一個TreeMap的子類,此類也屬於排序類,按key排序。

import java.util.TreeMap;import java.util.Map;import java.util.Iterator;import java.util.Set;import java.util.Collection;public class TreeMapDemo01{    public static void main(String[] args){        Map<String,String> map = null;        map = new TreeMap<String,String>();        map.put("A、mldn","www.mldn.cn");        map.put("B、zhinangtuan","www.zhinangtuan.cn");        map.put("C、mldnjava","www.mldnjava.cn");        Set<String> keys = map.keySet();        Iterator<String> iter = keys.iterator();        while(iter.hasNext()){            String str = iter.next();            System.out.print(str+"、");        }        System.out.println("");        Collection<String> values = map.values();        Iterator<String> iterv = values.iterator();        while(iterv.hasNext()){            String str = iterv.next();            System.out.print(str+"、");        }    }}

輸出:

A、mldn、B、zhinangtuan、C、mldnjava、
www.mldn.cn、www.zhinangtuan.cn、www.mldnjava.cn、

使用TreeMap可以方便的完成排序的操作,如果自訂的類要做為key的話,則肯定要實現Comparable介面,指定比較的規則。

弱引用:WeakHashMap

之前所講解的Map子類中的資料都是使用強引用儲存的,即:裡面的內容不管是否使用都始終在集合中保留,如果希望集合可以自動清理暫時不用的資料就可以使用WeakHashMap類。

WeakHashMap的定義如下:

public class WeakHashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>

如果假設一個Map中的某些內容長時間不使用的話,按照之前的做法是不會刪除掉的,如果希望其可以自動刪除掉,可以使用弱引用

import java.util.WeakHashMap;import java.util.Map;import java.util.Set;import java.util.Iterator;import java.util.Collection;public class WeakHashMapDemo01{    public static void main(String[] args){        Map<String,String> map = null;        map = new WeakHashMap<String,String>();        map.put(new String("mldn"),new String("www.mldn.cn"));        map.put(new String("zhinangtuan"),new String("www.zhinangtuan.cn"));        map.put(new String("mldnjava"),new String("www.mldnjava.cn"));        System.gc();        map.put(new String("lxh"),new String("lixinghua"));        System.out.println(map);    }}

輸出:

{lxh=lixinghua}

提示:對象的引用強度說明
從JDK1.2版本開始,Java把對象的引用分為四種層級,從而使程式能更加靈活的控制對象的生命週期.這四種層級由高到低依次為:強引用,軟引用,弱引用和虛引用,下面來簡單瞭解以下四種引用的區別:

強引用:當記憶體不足時,JVM寧可出現OutOfMemeryError錯誤而使程式停止,也不會回收此對象來釋放空間。
軟引用:當記憶體不足時,會回收這些對象的記憶體,用來實現記憶體敏感的快取。
弱引用:無論記憶體是否緊張,被記憶體回收行程發現立即回收
虛引用:和沒有任何引用一樣

4、總結

1.介紹了Map的特點及基本操作
2.Map與Map.Entry的關係
3.Map的子類:HashMap、Hashtable、TreeMap、WeakHashMap
4.主要功能就是尋找,根據key找到value

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.