1. 程式人生 > >Java基礎——常用物件API(四)Map集合

Java基礎——常用物件API(四)Map集合

一、集合特點和常用方法

1.特點

一次新增一對元素,因此也稱作雙列集合。(相較下,Set稱為單列集合)

要保證鍵的唯一性。

2.功能

2.1.新增

value put(key,value);//返回前一個和key關聯的值,如果沒有返回null。

2.2.刪除

void  clear();//清空map集合。
value remove(key);//根據指定的key翻出這個鍵值對。

2.3.判斷

boolean containsKey(key):
boolean containsValue(value):
boolean isEmpty();

 2.4.獲取

value get(key);//通過鍵獲取值,如果沒有該鍵返回null。
                    //注:當然可以通過返回null,來判斷是否包含指定鍵。 
int size(); //獲取鍵值對的個數。

 使用的小例子,裡面大註釋的程式碼也可以用來試一下:

public class MapDemo {

	public static void main(String[] args) {
		
		Map<Integer,String> map = new HashMap<Integer,String>();
		method_2(map);
	}
	
	public static void method_2(Map<Integer,String> map){
		map.put(8,"zhaoliu");
		map.put(2,"zhaoliu");
		map.put(7,"xiaoqiang");
		map.put(6,"wangcai");
		
		Collection<String> values = map.values();
		
		Iterator<String> it2 = values.iterator();
		while(it2.hasNext()){
			System.out.println(it2.next());
		}
		
		/*
		 * 通過Map轉成set就可以迭代。
		 * 找到了另一個方法。entrySet。
		 * 該方法將鍵和值的對映關係作為物件儲存到了Set集合中,而這個對映關係的型別就是Map.Entry型別(結婚證)
		 * 
		 * 
		 */
		Set<Map.Entry<Integer, String>> entrySet = map.entrySet();
		
		Iterator<Map.Entry<Integer, String>> it = entrySet.iterator();
		
		while(it.hasNext()){
			Map.Entry<Integer, String> me = it.next();
			Integer key = me.getKey();
			String value = me.getValue();
			System.out.println(key+"::::"+value);
			
		}
		
		//取出map中的所有元素。
		//原理,通過keySet方法獲取map中所有的鍵所在的Set集合,在通過Set的迭代器獲取到每一個鍵,
		//在對每一個鍵通過map集合的get方法獲取其對應的值即可。
		/*
		Set<Integer> keySet = map.keySet();
		Iterator<Integer> it = keySet.iterator();
		
		while(it.hasNext()){
			Integer key = it.next();
			String value = map.get(key);
			System.out.println(key+":"+value);
			
		}
		*/
	}
	
	public static void method(Map<Integer,String> map){//學號和姓名
		// 新增元素。
		System.out.println(map.put(8, "wangcai"));//null
		System.out.println(map.put(8, "xiaoqiang"));//wangcai 存相同鍵,值會覆蓋。
		map.put(2,"zhangsan");
		map.put(7,"zhaoliu");
		
		//刪除。
//		System.out.println("remove:"+map.remove(2));
		
		//判斷。
//		System.out.println("containskey:"+map.containsKey(7));
		
		//獲取。 
		System.out.println("get:"+map.get(6));
		System.out.println(map);
		Outer.Inner.show();
	}
	
}

接著說方法:

2.5.利用keySet遍歷

//取出map中的所有元素。
//原理,通過keySet方法獲取map中所有的鍵所在的Set集合,再通過Set的迭代器獲取到每一個鍵,
//再對每一個鍵通過map集合的get方法獲取其對應的值即可。

Set<Integer> keySet = map.keySet();//獲取鍵的集合
Iterator<Integer> it = keySet.iterator();//獲取集合迭代器
//遍歷
while(it.hasNext()){
	Integer key = it.next();
	String value = map.get(key);
	System.out.println(key+":"+value);
}

2.6.利用entrySet遍歷

//該方法將鍵和值的對映關係作為物件儲存到了Set集合中,而這個對映關係的型別就是Map.Entry型別(結婚證)

Set<Map.Entry<Integer, String>> entrySet = map.entrySet();
Iterator<Map.Entry<Integer, String>> it = entrySet.iterator();
while(it.hasNext()){
	Map.Entry<Integer, String> me = it.next();
	Integer key = me.getKey();
	String value = me.getValue();
	System.out.println(key+"::::"+value);
}

2.7.values來遍歷

Collection<String> values = map.values();
		
Iterator<String> it2 = values.iterator();
while(it2.hasNext()){
	System.out.println(it2.next());
}

二、Map常見子類

1.Hashtable

內部結構是雜湊表,是同步的。不允許null作為鍵,null作為值。

他有個小弟叫做Properties,用來儲存鍵值對型的配置檔案的資訊。可以和IO技術相結合發揮最大作用。

2.HashMap

內部結構是雜湊表不是同步的。允許null作為鍵,null作為值。

3.TreeMap

內部結構是二叉樹不是同步的。可以對Map集合中的鍵進行排序。 

使用小例子:

        public static void main(String[] args) {

		
		/*
		 * 將學生物件和學生的歸屬地通過鍵與值儲存到map集合中。
		 * 
		 */
		
		HashMap<Student,String> hm = new HashMap<Student,String>();//student是個外部類

		
		hm.put(new Student("lisi",38),"北京");
		hm.put(new Student("zhaoliu",24),"上海");
		hm.put(new Student("xiaoqiang",31),"瀋陽");
		hm.put(new Student("wangcai",28),"大連");
		hm.put(new Student("zhaoliu",24),"鐵嶺");//student判斷相同需要覆寫hashCode和equals方法
		
//		Set<Student> keySet = hm.keySet();		
//		Iterator<Student> it = keySet.iterator();
		
		Iterator<Student> it = hm.keySet().iterator();
		
		while(it.hasNext()){
			Student key = it.next();
			String value = hm.get(key);
			System.out.println(key.getName()+":"+key.getAge()+"---"+value);
		}
		
		
	}