Collection集合的特色:算法
集合中存儲的全部元素都是單一元素,元素和元素之間沒有必然的關係。所以咱們把Collection集合也稱爲單列集合。數組
Map集合:安全
Map集合中保存的是一組(一對)數據。數據之間存在着必定的對應關係。Map集合就能夠將數據的對應關係維護起來。當這樣的數據存儲在Map集合中,咱們取出的時候,就能夠根據這種對應關係獲取到其中這組數據。工具
public interface Map<K,V>學習
將鍵映射到值的對象。一個映射不能包含重複的鍵;每一個鍵最多隻能映射到一個值。spa
Map集合中的key是惟一的。每一個key都有一個value值和其一一對應。code
2.1 添加方法對象
經過演示Map接口中的Map方法,發現put方法能夠將指定的一組數據保存到集合中。blog
可是put方法有返回值:排序
若是調用put方法的時候,在保存的key和value值時,key在集合中不存在,這時至關於給集合中保存了一組新的數據。這時put方法獲得的null。若是保存的這組數據中的key在集合中已經存在,這時會用當前的value值覆蓋掉key對應的原來的value值,並返回被覆蓋的那個value值。
總結:put方法能夠將一組對象保存到Map中,返回的當前key對應的原始的value值。若是key是第一次出現返回的null。若是不是第一次,就會修改原始的value值。返回原來的value值
2.2 刪除方法
根據指定的key獲取對應的value值。若是給出的key在集合中沒有,返回null。
1 /* 2 * Map集合中的獲取方法 3 */ 4 public class MapDemo3 { 5 public static void main(String[] args) { 6 7 //建立集合對象 8 Map map = new HashMap(); 9 10 map.put("aa", "bb"); 11 map.put("cc", "dd"); 12 map.put("ee", "fff"); 13 14 //打印 15 System.out.println(map); 16 17 Object o = map.get("aa"); 18 System.out.println(o); 19 System.out.println(map); 20 } 21 }
1 /* 2 * 演示Map集合中的判斷方法 3 */ 4 public class MapDemo4 { 5 public static void main(String[] args) { 6 // 建立集合對象 7 Map map = new HashMap(); 8 9 map.put("aa", "bb"); 10 map.put("cc", "dd"); 11 map.put("ee", "fff"); 12 13 //判斷集合中是否包含指定的key 14 System.out.println(map.containsKey("aa")); 15 System.out.println(map.containsValue("bb")); 16 System.out.println(map.isEmpty()); 17 } 18 }
Map集合中保存的key-value一組數據。它們不能直接使用Iterator進行遍歷。若是須要對Map集合進行遍歷,這時必須先將Map集合轉成Collection下的某個集合容器,而後再使用Iterator進行遍歷。
Map集合的遍歷有兩種方式:
一、 獲取Map中的全部key,而後將這些key保存到Set集合中。這時就可使用Iterator進行遍歷,進而就能獲得每一個的單獨的key值,再使用Map中的get(key)方法獲得key對應的value值。
二、 獲取到Map中的key和value這組數據,再封裝成一個新的對象。
1 /* 2 * 使用Map集合中的keySet方法遍歷Map集合 3 */ 4 public class KetSetDemo { 5 public static void main(String[] args) { 6 7 //建立集合對象 8 Map map = new HashMap(); 9 10 map.put("aa", "bb"); 11 map.put("cc", "dd"); 12 map.put("ee", "ff"); 13 14 //獲取到Map中的全部key組成的Set集合 15 Set set = map.keySet(); 16 17 //遍歷Set集合 18 for( Iterator it = set.iterator() ; it.hasNext() ; ){ 19 //獲取到Set集合中的某個key值 20 Object key = it.next(); 21 //調用Map集合中的get方法,獲得key對應的value值 22 Object value = map.get(key); 23 System.out.println(key+"...."+value); 24 } 25 }
1 /* 2 * 使用Map集合中的 entrySet 方法遍歷Map集合 3 */ 4 public class EntrySetDemo { 5 public static void main(String[] args) { 6 // 建立集合對象 7 Map map = new HashMap(); 8 9 map.put("aa", "bb"); 10 map.put("cc", "dd"); 11 map.put("ee", "ff"); 12 13 // 獲取到全部key和value組成的Entry對象,保存到Set集合中 14 Set set = map.entrySet(); 15 16 // 遍歷Set集合 17 for (Iterator it = set.iterator(); it.hasNext();) { 18 19 //已經獲取到key和value組成的Entry對象 20 Object obj = it.next(); 21 //因爲取出的數據被提高成Object類型,這時須要向下轉型 22 Entry entry = (Entry) obj; 23 System.out.println(entry.getKey()+"...."+entry.getValue()); 24 } 25 } 26 }
就業班中學習JavaWEB中的JSP中的JSTL技術時,其中有foreach的標籤,遍歷Map集合的時候,使用的entrySet。
獲取到的Map集合中的全部value值組成的Collection集合。
1 /* 2 * 演示Map集合中的values方法 3 */ 4 public class ValuesDemo { 5 public static void main(String[] args) { 6 7 //建立集合對象 8 Map map = new HashMap(); 9 10 map.put("aa", "bb"); 11 map.put("cc", "dd"); 12 map.put("ee", "ff"); 13 14 //獲取到Map集合中的全部value值 15 Collection coll = map.values(); 16 17 //遍歷集合 18 for(Iterator it = coll.iterator() ; it.hasNext() ;){ 19 System.out.println(it.next()); 20 } 21 } 22 }
基於哈希表的 Map 接口的實現。此實現提供全部可選的映射操做,並容許使用 null 值和 null 鍵。(除了非同步和容許使用 null 以外,HashMap 類與 Hashtable 大體相同。)此類不保證映射的順序,特別是它不保證該順序恆久不變。
HashMap是Map接口的實現類,它的底層使用的哈希表。哈希表做用在HashMap集合的key上。
當使用自定義對象做爲HashMap集合的key值時,這個自定義對象所屬的類須要複寫Object類中的hashCode和equals方法。
1 /* 2 * 演示HashMap,使用自定義對象做爲Map的key值 3 */ 4 public class HashMapDemo { 5 public static void main(String[] args) { 6 7 //建立集合對象 8 HashMap map = new HashMap(); 9 10 map.put(new Person("張三",23), "上海"); 11 map.put(new Person("張三",23), "上海"); 12 map.put(new Person("李四",33), "北京"); 13 map.put(new Person("王五",39), "東莞"); 14 15 //獲取全部的key組成的set集合 16 Set set = map.keySet(); 17 18 //遍歷 19 for( Iterator it = set.iterator();it.hasNext() ; ){ 20 Object key = it.next(); 21 //獲取value值 22 Object value = map.get(key); 23 System.out.println(key+"...."+value); 24 } 25 } 26 }
基於紅黑樹(Red-Black tree)的 NavigableMap
實現。該映射根據其鍵的天然順序進行排序,或者根據建立映射時提供的 Comparator
進行排序,具體取決於使用的構造方法。
TreeMap的底層是二叉樹結構。二叉樹做用在集合的key上。TreeMap集合能夠對保存在其中的元素進行排序。
若是將對象保存在TreeMap集合中,key上的這個對象應該具有比較的功能,key上的對象所屬的類應該實現Comparable接口。或者是在建立TreeMap的時候,傳遞一個Comparator對象。
1 /* 2 * 使用自定義對象做爲TreeMap的key值 3 */ 4 public class TreeMapDemo { 5 public static void main(String[] args) { 6 7 //建立對象 8 TreeMap map = new TreeMap( ); 9 10 map.put(new Person("張三",23), "上海"); 11 map.put(new Person("張三",23), "上海"); 12 map.put(new Person("李四",33), "北京"); 13 map.put(new Person("王五",33), "東莞"); 14 15 //使用entrySet方法進行遍歷 16 Set set = map.entrySet(); 17 18 for( Iterator it = set.iterator(); it.hasNext() ; ){ 19 Object obj = it.next(); 20 Entry entry = (Entry) obj; 21 System.out.println(entry.getKey()+"....."+entry.getValue()); 22 } 23 } 24 }
1 /* 2 * 需求:統計字符串中每一個字符的次數。 3 * 4 * 分析: 5 * 字符串數據是不肯定的數據。其中的字符是什麼也不知道, 6 * 可是咱們能夠只要這個字符出現過,就須要給出一個計數器統計這個字符的次數 7 * 8 * 遍歷字符串,取出每一個字符,而後判斷它是否已經在統計的計數器中出現過, 9 * 若是出現過,就給這個計數器+1,若是沒有出現過,說明這個字符是第一次出現 10 * 就給這個字符的計數器賦值爲1. 11 * 12 * 統計字符的次數: 13 * 字符 次數 14 * 使用從字符串中取出的字符做爲Map的key值,次數做爲Map的value值 15 * 只要從字符串中取出一個字符,就判斷當前這個字符在Map的key中是否存在, 16 * 若是存在,就取出對應的value值+1,再保存到Map中。若是不存在,就說明 17 * 字符是第一次出現,直接給value值爲1,保存到Map中。 18 * 19 */ 20 public class MapTest { 21 public static void main(String[] args) { 22 23 String s = "djfjsdl使用從字符串中取出的字符做爲Map的key值,次數做爲Map的value值"; 24 25 //須要定義一個集合 26 Map map = new HashMap(); 27 28 //遍歷字符串 29 for(int i = 0 ; i < s.length() ; i++ ){ 30 //取出字符 31 char ch = s.charAt(i); 32 //判斷當前的字符在Map中是否存在 33 if( map.containsKey(ch) ){ 34 //判斷成立說明當前從字符串中取出的字符,已經出現過 35 Integer value = (Integer) map.get(ch); 36 //給value+1,再保存到Map中 37 value = value + 1; 38 map.put(ch, value); 39 }else{ 40 //判斷不成立,說明當前的字符是第一次出現 41 map.put(ch, 1); 42 } 43 } 44 45 //遍歷Map集合,取出每一個字符的次數 46 Set set = map.keySet(); 47 for( Iterator it = set.iterator() ; it.hasNext() ; ){ 48 Object key = it.next(); 49 Object value = map.get(key); 50 System.out.println("'"+key+"'出現的次數是:"+value); 51 } 52 } 53 }
此類實現一個哈希表,該哈希表將鍵映射到相應的值。任何非 null
對象均可以用做鍵或值。
Hashtable集合它屬於Map集合,可是是JDK1.0時期的,底層是哈希表,和HashMap功能一致。它是安全的。
1 /* 2 * 演示古老的雙列集合Hashtable 3 */ 4 public class HashtableDemo { 5 public static void main(String[] args) { 6 7 //建立集合對象 8 Hashtable table = new Hashtable(); 9 10 table.put("aa","bb"); 11 table.put("ccc","ddd"); 12 table.put("ccc","ddd"); 13 table.put("eee","fff"); 14 15 //遍歷 16 Enumeration en = table.keys(); 17 while( en.hasMoreElements() ){ 18 Object key = en.nextElement(); 19 Object value = table.get(key); 20 System.out.println(key+"...."+value); 21 } 22 } 23 }
工具類:在JDK中提供大量的類。可是這些類都有對用的功能。但是某些的功能並不能知足實際的全部需求,因而針對這些類有提供的其餘的類,處於輔助其餘類的這些類被稱爲工具類。
JDK中的工具類通常都以s結尾。而且工具類中的全部方法所有是靜態的。
此類徹底由在 collection 上進行操做或返回 collection 的靜態方法組成。它包含在 collection 上操做的多態算法,即「包裝器」,包裝器返回由指定 collection 支持的新 collection,以及少數其餘內容。
Collections:中的方法都是靜態的,能夠操做集合。
反轉List集合中的元素。
反轉比較器。
結論:在使用集合的時候,若是發現須要使用集合的某個功能,可是自身沒有這時就須要考慮使用Collections中的方法。
Arrays工具類中提供的大量能夠操做數組的方法(折半查找、複製、排序、比較等)。
asList:它的功能是將一個數組轉成List集合。目的是但願經過使用集合的方法來操做數組。
1 /* 2 * 演示Arrays中的方法,將數組轉成集合 3 */ 4 public class ArraysDemo { 5 public static void main(String[] args) { 6 7 //Integer[] arr = {11,22,33,44,55,66,77,88}; 8 int[] arr = {11,22,33,44,55,66,77,88}; 9 10 //將數組轉成集合 11 List list = Arrays.asList(arr); 12 13 System.out.println(list); 14 //求最大值 15 Object max = Collections.max(list); 16 System.out.println(max); 17 Collections.reverse(list); 18 System.out.println(list); 19 20 } 21 }
結論:數組轉成集合的時候,只能將引用類型的數組中空間中的每一個對象轉後存儲到集合中。基本類型數組做爲一個總體存儲在集合中。
集合轉成數組:
直接使用Collection接口中的toArray方法完成。