集合框架(三)
阿新 • • 發佈:2017-09-19
歸納 取值 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、集合的嵌套遍歷(理解)
集合框架(三)