1. 程式人生 > >集合框架(三)

集合框架(三)

歸納 取值 student bool try 順序 hashset sem 存儲

Map(掌握)

1、將鍵映射到值的對象。一個映射不能包含重復的鍵;每個鍵最多只能映射到一個值。

2、Map和Collection的區別

	
		A:Map 存儲的是鍵值對形式的元素,鍵唯一,值可以重復。夫妻對
		B:Collection 存儲的是單獨出現的元素,子接口Set元素唯一,子接口List元素可重復。光棍

3、Map接口功能概述

	
		A:添加/修改功能
			V put(K key,V value)
			如果鍵是第一次存儲,就直接存儲元素,返回null
			如果鍵不是第一次存在,就用值把以前的值替換掉,返回以前的值
		B:刪除功能
			void clear():移除所有的鍵值對元素
			V remove(Object key):根據鍵刪除鍵值對元素,並把值返回
		C:判斷功能
			boolean containsKey(Object key):判斷集合是否包含指定的鍵
			boolean containsValue(Object value):判斷集合是否包含指定的值
			boolean isEmpty():判斷集合是否為空
		D:獲取功能
			Set<Map.Entry<K,V>> entrySet():獲取鍵值對對象的集合
			V get(Object key):根據鍵獲取值
			Set keySet():獲取集合中所有鍵的集合
			Collection values():獲取集合中所有值的集合
		E:長度功能
			int size():返回集合中的鍵值對的對數

4、Map集合的遍歷

	
		A:鍵找值
			a:獲取所有鍵的集合
			b:遍歷鍵的集合,得到每一個鍵
			c:根據鍵到集合中去找值
		
		B:鍵值對對象找鍵和值
			a:獲取所有的鍵值對對象的集合
			b:遍歷鍵值對對象的集合,獲取每一個鍵值對對象
			c:根據鍵值對對象去獲取鍵和值
			
		代碼體現:
			Map<String,String> hm = new HashMap<String,String>();
			
			hm.put("it002","hello");
			hm.put("it003","world");
			hm.put("it001","java");
			
			//方式1 鍵找值
			Set set = hm.keySet();
			for(String key : set) {
				String value = hm.get(key);
				System.out.println(key+"---"+value);
			}
			
			//方式2 鍵值對對象找鍵和值
			Set<Map.Entry<String,String>> set2 = hm.entrySet();
			for(Map.Entry<String,String> me : set2) {
				String key = me.getKey();
				String value = me.getValue();
				System.out.println(key+"---"+value);
			}

5、HashMap集合的練習

		
		A:HashMap<String,String>
		B:HashMap<Integer,String>
		C:HashMap<String,Student>
		D:HashMap<Student,String>

6、HashMap集合的練習

		
		A:TreeMap<String,String>
		B:TreeMap<Student,String>

7、HashMap集合的練習

		
		A:統計一個字符串中每個字符出現的次數
		B:集合的嵌套遍歷
			a:HashMap嵌套HashMap
			b:HashMap嵌套ArrayList
			c:ArrayList嵌套HashMap
			d:多層嵌套

Collections(理解)

	
	1、是針對集合進行操作的工具類
	2、面試題:Collection和Collections的區別
		A:Collection 是單列集合的頂層接口,有兩個子接口List和Set
		B:Collections 是針對集合進行操作的工具類,可以對集合進行排序和查找等
	3、常見的幾個小方法:
		A:public static  void sort(List list)
		B:public static  int binarySearch(List<?> list,T key)
		C:public static  T max(Collection<?> coll)
		D:public static void reverse(List<?> list)
		E:public static void shuffle(List<?> list)
	4、案例
		A:ArrayList集合存儲自定義對象的排序
		B:模擬鬥地主洗牌和發牌
		C:模擬鬥地主洗牌和發牌並對牌進行排序

集合總結歸納

	
Collection(單列集合)
		List(有序,可重復)
			ArrayList
				底層數據結構是數組,查詢快,增刪慢
				線程不安全,效率高
			Vector
				底層數據結構是數組,查詢快,增刪慢
				線程安全,效率低
			LinkedList
				底層數據結構是鏈表,查詢慢,增刪快
				線程不安全,效率高
		Set(無序,唯一)
			HashSet
				底層數據結構是哈希表。
				哈希表依賴兩個方法:hashCode()和equals()
				執行順序:
					首先判斷hashCode()值是否相同
						是:繼續執行equals(),看其返回值
							是true:說明元素重復,不添加
							是false:就直接添加到集合
						否:就直接添加到集合
				最終:
					自動生成hashCode()和equals()即可
					
				LinkedHashSet
					底層數據結構由鏈表和哈希表組成。
					由鏈表保證元素有序。
					由哈希表保證元素唯一。
			TreeSet
				底層數據結構是紅黑樹。(是一種自平衡的二叉樹)
				如何保證元素唯一性呢?
					根據比較的返回值是否是0來決定
				如何保證元素的排序呢?
					兩種方式
						自然排序(元素具備比較性)
							讓元素所屬的類實現Comparable接口
						比較器排序(集合具備比較性)
							讓集合接收一個Comparator的實現類對象
	Map(雙列集合)
		A:Map集合的數據結構僅僅針對鍵有效,與值無關。
		B:存儲的是鍵值對形式的元素,鍵唯一,值可重復。
		
		HashMap
			底層數據結構是哈希表。線程不安全,效率高
				哈希表依賴兩個方法:hashCode()和equals()
				執行順序:
					首先判斷hashCode()值是否相同
						是:繼續執行equals(),看其返回值
							是true:說明元素重復,不添加
							是false:就直接添加到集合
						否:就直接添加到集合
				最終:
					自動生成hashCode()和equals()即可
			LinkedHashMap
				底層數據結構由鏈表和哈希表組成。
					由鏈表保證元素有序。
					由哈希表保證元素唯一。
		Hashtable
			底層數據結構是哈希表。線程安全,效率低
				哈希表依賴兩個方法:hashCode()和equals()
				執行順序:
					首先判斷hashCode()值是否相同
						是:繼續執行equals(),看其返回值
							是true:說明元素重復,不添加
							是false:就直接添加到集合
						否:就直接添加到集合
				最終:
					自動生成hashCode()和equals()即可
		TreeMap
			底層數據結構是紅黑樹。(是一種自平衡的二叉樹)
				如何保證元素唯一性呢?
					根據比較的返回值是否是0來決定
				如何保證元素的排序呢?
					兩種方式
						自然排序(元素具備比較性)
							讓元素所屬的類實現Comparable接口
						比較器排序(集合具備比較性)
							讓集合接收一個Comparator的實現類對象

2、到底使用那種集合

	
		看需求。
	
	是否是鍵值對象形式:
		是:Map
			鍵是否需要排序:
				是:TreeMap
				否:HashMap
			不知道,就使用HashMap。
			
		否:Collection
			元素是否唯一:
				是:Set
					元素是否需要排序:
						是:TreeSet
						否:HashSet
					不知道,就使用HashSet
					
				否:List
					要安全嗎:
						是:Vector(其實我們也不用它,後面我們講解了多線程以後,我在給你回顧用誰)
						否:ArrayList或者LinkedList
							增刪多:LinkedList
							查詢多:ArrayList
						不知道,就使用ArrayList
			不知道,就使用ArrayList

3、集合的常見方法及遍歷方式

	
		Collection:
		add()
		remove()
		contains()
		iterator()
		size()
		
		遍歷:
			增強for
			叠代器
			
		|--List
			get()
			
			遍歷:
				普通for
		|--Set
	
	Map:
		put()
		remove()
		containskey(),containsValue()
		keySet()
		get()
		values()
		entrySet()
		size()
		
		遍歷:
			根據鍵找值
			根據鍵值對對象分別找鍵和值
			
	作業:
		我講解過的任意一個集合,我要求你存儲什麽,你就能夠存儲什麽。
		並且,還要能夠遍歷出來。

4、ArrayList,LinkedList,HashSet,HashMap(掌握)

	
		存儲字符串和自定義對象數據並遍歷

5、集合的嵌套遍歷(理解)

集合框架(三)