在上一篇Java中的集合框架學習之Collection 詳解的分享中已經對Collection以及子類List,Set類進行了詳細的概述和講解,在java的集合框架中還有個Map,和OC中的字典很相似,下面就來一起揭開Map的神秘面紗.
學習交流討論及資料獲取請關注:極客James
Map接口
public interface Map<K,V>
將鍵映射到值的對象。一個映射不能包含重復的鍵;每個鍵最多只能映射到一個值。
此接口取代 Dictionary 類,后者完全是一個抽象類,而不是一個接口。
Map 接口提供三種collection 視圖,允許以鍵集、值集或鍵-值映射關系集的形式查看某個映射的內容。映射順序 定義為迭代器在映射的 collection 視圖上返回其元素的順序。某些映射實現可明確保證其順序,如 TreeMap 類;另一些映射實現則不保證順序,如 HashMap 類。
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class Demo17 {
public static void main(String[] args) {
Map m = new HashMap();
m.put(1, "jack");
m.put(2, "rose");
m.put(3, "lucy");
System.out.println(m);//{1=jack, 2=rose, 3=lucy}
Set s = m.entrySet();
System.out.println(s);//[1=jack, 2=rose, 3=lucy]
s = m.keySet();
System.out.println(s);//[1, 2, 3]
for (Object key : s) {
System.out.println(key);//Key
System.out.println(m.get(key));//Value
}
Collection c = m.values();
System.out.println(c);
}
}
Map.Entry
映射項(鍵-值對)。Map.entrySet 方法返回映射的 collection 視圖,其中的元素屬于此類。獲得映射項引用的唯一 方法是通過此 collection 視圖的迭代器來實現。這些 Map.Entry 對象僅 在迭代期間有效;更確切地講,如果在迭代器返回項之后修改了底層映射,則某些映射項的行為是不確定的,除了通過 setValue 在映射項上執行操作之外。
按照最正統的做法,所有的Map集合的內容都要依靠Iterator輸出,以上雖然是完成了輸出,但是完成的不標準,Map集合本身并不能直接為Iterator實例化,如果此時非要使用Iterator輸出Map集合中內容的話,則要采用如下的步驟:
方法一:
1.通過entrySet方法變成Set對象
2.調用Set的Iterator方法,此時每個Iterator對象是Map.Entry對象
3.對Map.Entry分離出 key - value
方法二:
1.通過keySet得到Map集合多有key的Set集合
2.調用Set的Iterator方法,此時每個Iterator對象是key值
3.通過Map的getValue(key)得到value值
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
public class Demo18 {
public static void main(String[] args) {
Map<Integer, String> m = new HashMap<Integer, String>();
m.put(1, "jack");
m.put(2, "rose");
m.put(3, "lucy");
//第一種方法
Set s = m.entrySet();
Iterator it = s.iterator();
while(it.hasNext()){
Map.Entry me = (Entry) it.next();
System.out.println(me.getKey()+" "+me.getValue());
}
//第二種方法
s = m.keySet();//得到的是key的集合
it = s.iterator();//然后將key迭代出來
while(it.hasNext()){
int i = (int)it.next();
System.out.println(i+" "+m.get(i));
}
}