JAVA基礎--JAVA API集合框架

1、Map集合

  1. map集合介紹

Collection集合的特色:算法

         集合中存儲的全部元素都是單一元素,元素和元素之間沒有必然的關係。所以咱們把Collection集合也稱爲單列集合。數組

Map集合:安全

         Map集合中保存的是一組(一對)數據。數據之間存在着必定的對應關係。Map集合就能夠將數據的對應關係維護起來。當這樣的數據存儲在Map集合中,咱們取出的時候,就能夠根據這種對應關係獲取到其中這組數據。工具

 

        public interface Map<K,V>學習

    將鍵映射到值的對象。一個映射不能包含重複的鍵;每一個鍵最多隻能映射到一個值。spa

    Map集合中的key是惟一的。每一個key都有一個value值和其一一對應。code

  2.  Map集合中的方法

    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 刪除方法

   

    2.3 獲取方法

根據指定的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 }

 

 

    2.4 判斷方法

 

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 }

 

 

  3.Map集合的遍歷

    3.1 Map集合介紹

Map集合中保存的key-value一組數據。它們不能直接使用Iterator進行遍歷。若是須要對Map集合進行遍歷,這時必須先將Map集合轉成Collection下的某個集合容器,而後再使用Iterator進行遍歷。

Map集合的遍歷有兩種方式:

一、  獲取Map中的全部key,而後將這些key保存到Set集合中。這時就可使用Iterator進行遍歷,進而就能獲得每一個的單獨的key值,再使用Map中的get(key)方法獲得key對應的value值。

二、  獲取到Map中的key和value這組數據,再封裝成一個新的對象。

    3.2 keySet遍歷

 

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     }

 

 

   3.3 entrySet遍歷

  

 

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。

    3.4 values方法

 

獲取到的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 }

 

 

   4.  HashMap演示

基於哈希表的 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 }

 

 

  5. TreeMap演示

基於紅黑樹(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 }

 

 

   6.  Map練習:

 

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 }

 

  7.  Hashtable演示

此類實現一個哈希表,該哈希表將鍵映射到相應的值。任何非 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 }

 

 

2.  工具類介紹

工具類:在JDK中提供大量的類。可是這些類都有對用的功能。但是某些的功能並不能知足實際的全部需求,因而針對這些類有提供的其餘的類,處於輔助其餘類的這些類被稱爲工具類。

JDK中的工具類通常都以s結尾。而且工具類中的全部方法所有是靜態的。

  1. Collections工具類

此類徹底由在 collection 上進行操做或返回 collection 的靜態方法組成。它包含在 collection 上操做的多態算法,即「包裝器」,包裝器返回由指定 collection 支持的新 collection,以及少數其餘內容。

Collections:中的方法都是靜態的,能夠操做集合。

反轉List集合中的元素。

 

反轉比較器。

 

結論:在使用集合的時候,若是發現須要使用集合的某個功能,可是自身沒有這時就須要考慮使用Collections中的方法。

     2. Arrays工具類、

 

 

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方法完成。

相關文章
相關標籤/搜索