【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