天天看點

JavaSE基礎複習鞏固

第八天:Map集合(接口) 異常類(Exception)

Map:雙列集合最頂層,它是以鍵值對的方式存儲資料的。

Map<k,v> k:key(鍵) v:value(值) key:value

key(鍵):是唯一的, 一個鍵隻能對應一個值,但是一個值可以對應多個鍵

value:是可以重複的。

添加資料用put(Object key,Object value)

注意:1.當映射的某條資料的key在集合中已存在時,會把原先的value覆寫掉,并且傳回的是被覆寫的value。

2.當映射的某條資料的key在集合中已不存在時,這條資料可以直接添加到集合中,并且傳回null。

HashMap(底層:資料加連結清單+哈希表+紅黑樹)

1.1 Map接口概述

我們通過檢視Map接口描述,發現Map接口下的集合與Collection接口下的集合,它們存儲資料的形式不同。 

A:Collection中的集合,元素是孤立存在的(了解為單身),向集合中存儲元素采用一個個元素的方式存儲

B:Map中的集合,元素是成對存在的(了解為夫妻)。每個元素由鍵與值兩部分組成,通過鍵可以找對所對應的值。

C:Collection中的集合稱為單列集合,Map中的集合稱為雙列集合。

需要注意的是,Map中的集合不能包含重複的鍵,值可以重複;每個鍵隻能對應一個值。

1.1.1 hashMap的使用(常用方法)

A:添加功能:

   V put(K key, V value) :以鍵=值的方式存入Map集合

B:擷取功能:

     V get(Object key):根據鍵擷取值

int size():傳回Map中鍵值對的個數

C:判斷功能:

    boolean containsKey(Object key):判斷Map集合中是否包含鍵為key的鍵值對

    boolean containsValue(Object value):判斷Map集合中是否包含值為value鍵值對

 boolean isEmpty():判斷Map集合中是否沒有任何鍵值對

D:删除功能:

 void clear():清空Map集合中所有的鍵值對

 V remove(Object key):根據鍵值删除Map中鍵值對

例子:

package com.swlz.map;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class MapDemo2 {
    public static void main(String[] args) {
       /* A:添加功能:
        V put(K key, V value) :以鍵=值的方式存入Map集合
        B:擷取功能:
        V get(Object key):根據鍵擷取值
        int size():傳回Map中鍵值對的個數
        C:判斷功能:
        boolean containsKey(Object key):判斷Map集合中是否包含鍵為key的鍵值對
        boolean containsValue(Object value):判斷Map集合中是否包含值為value鍵值對
        boolean isEmpty():判斷Map集合中是否沒有任何鍵值對
        D:删除功能:
        void clear():清空Map集合中所有的鍵值對
        V remove(Object key):根據鍵值删除Map中鍵值對
        E:周遊功能:
        Set<Map.Entry<K,V>> entrySet():将每個鍵值對封裝到一個個Entry對象中,再把所有Entry的對象封裝到Set集合中傳回*/
        //建立集合
        Map<String,String>  map=new HashMap<>();
        map.put("001","詹三");
        map.put("002","李似");
        map.put("003","王無");
//        V get(Object key):根據鍵擷取值
        System.out.println(map.get("001"));
//        int size():傳回Map中鍵值對的個數
        System.out.println(map.size());
       /* C:判斷功能:
        boolean containsKey(Object key):判斷Map集合中是否包含鍵為key的鍵值對*/
        System.out.println(map.containsKey("002"));//true
        // boolean containsValue(Object value):判斷Map集合中是否包含值為value鍵值對
        System.out.println(map.containsValue("張三"));//false
        //  boolean isEmpty():判斷Map集合中是否沒有任何鍵值對
        System.out.println(map.isEmpty());//false
      /*  D:删除功能:
        void clear():清空Map集合中所有的鍵值對*/
//        map.clear();
//        System.out.println(map);
//        V remove(Object key):根據鍵值删除Map中鍵值對
        System.out.println(map.remove("003"));
       /* E:周遊功能:
        Set<Map.Entry<K,V>> entrySet():将每個鍵值對封裝到一個個Entry對象中,再把所有Entry的對象封裝到Set集合中傳回*/
//        Set<Map.Entry<String, String>> entries = map.entrySet();
    }
}      

1.2 map集合的周遊(重點)

第一種方式用keySet

package com.swlz.map;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class MapDemo3 {
    public static void main(String[] args) {
        Map<String,String> map=new HashMap<>();
        map.put("001","張三");
        map.put("002","李四");
        map.put("003","王五");
        //周遊Map集合  第一種方式keyset
        Set<String> keys = map.keySet();//得到map集合中所有的key
//        然後在去周遊所有的key,通過key得到對應的value值
        for (String key : keys) {//得到map集合中所有的key
            String value = map.get(key);//通過map集合中的key得到對應的value值
            System.out.println("key"+key+":"+"value:"+value);
        }
    }
}      

第二種方式entrySet

package com.swlz.map;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class MapDemo4 {
    public static void main(String[] args) {
        Map<String,String> map=new HashMap<>();
        map.put("001","張三");
        map.put("002","李四");
        map.put("003","王五");
        //周遊Map集合  第二種方式entrySet()    map.entrySet()
        //擷取所有的鍵值對entrys 裡面有相應的getkey和getvalue方法   Map的内部類Entry 相當于一個類 裡面封裝了getkey和getvalue方法
        Set<Map.Entry<String, String>> entrys = map.entrySet();//通過getkey和getvalue方法,得到對象的key和value
        //周遊所有的鍵值對,拿到鍵和值
        for (Map.Entry<String, String> entry : entrys) {
            System.out.println("鍵:"+entry.getKey()+" "+"值:"+entry.getValue());//通過getkey和getvalue方法,得到對象的key和value
        }
    }
}      

1.3Map集合存儲自定義類資料

package com.swlz.map;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class MapDemo5 {
    public static void main(String[] args) {
        //建立HashMap集合  自定義對象作為key的時候 考慮去重  重寫自定義類中的Object的hashcode和equals方法即可。
        HashMap<Student, String> map = new HashMap<>();
        Student s1 = new Student("張三", 19);
        Student s2 = new Student("李四", 18);
        Student s3 = new Student("王五", 28);
        Student s4 = new Student("趙六", 20);
        Student s5 = new Student("錢七", 22);
        map.put(s1,"001");
        map.put(s2,"002");
        map.put(s3,"003");
        map.put(s4,"004");
        map.put(s5,"005");
        Set<Map.Entry<Student, String>> entries = map.entrySet();
        for (Map.Entry<Student, String> entry : entries) {
            System.out.println(entry.getKey()+" "+entry.getValue());
        }
    }
}      

集合總結,如圖:

JavaSE基礎複習鞏固

周遊:

for(元素的類型 變量 : 集合或者數組對象) {

可以直接使用變量;

}

這個list,set都可以使用

它用于周遊Collection和數組。通常隻進行周遊元素,不要在周遊的過程中對集合元素進行增删操作。

2.異常(Exception)類

異常:平時敲代碼的時候出現的bug

2.1異常:Exception處理的第一種方式

jvm處理----很不友好,很暴力

直接把Exception的相關資訊(異常的類型,異常的原因 異常的位置)列印出來

異常後面的代碼是執行不了的。

int  i=10/0;
               int[]   arr=new  int[2];
               System.out.println(arr[5]);
        System.out.println("後面的代碼繼續執行");      

2.2異常:Exception處理的第二種方式

捕捉處理---先捕捉到異常,再去處理異常

因為有時候,我們的代碼并不一定會存在異常

格式:

try{

//有可能出現異常的代碼-----嘗試捕捉異常

}catch(異常的類型 e){

//處理異常的相關操作

注意: 在try塊中,如果存在異常,那麼異常後面的代碼也不能執行,會直接跳到catch塊中 

package com.bianyiit.exception;
import java.text.SimpleDateFormat;
public class ExceptionDemo4 {
    public static void main(String[] args) {
     //第二種方式
        try{
            System.out.println(1);
                    int a=0;

                    int  i=10/a;

            System.out.println(2);
         }catch (ArithmeticException e){
             //處理異常
            System.out.println(3);
            System.out.println("出現數學異常了.....");
        }
        System.out.println(4);
    }
}      

2.3異常處理的第三種方式:抛異常

編譯時期(可以存在異常的代碼)----把異常抛出來------抛到方法聲明上面 ------誰調用此方法誰就處理這個異常

異常三個常用的方法:

String getMessage() 傳回此 throwable 的詳細消息字元串

String toString() 傳回此 throwable 的簡短描述

void printStackTrace() 列印異常的堆棧的跟蹤資訊

例子:

package com.bianyiit.exception;
import java.text.ParseException;
import java.text.SimpleDateFormat;
public class ExceptionDemo6 {
    public static void main(String[] args) throws Exception {

        /*異常處理的第三種方式:抛異常
         *   編譯時期(可以存在異常的代碼)----把異常抛出來------抛到方法聲明上面 ------誰調用此方法誰就處理這個異常
         *
         * */
       /* SimpleDateFormat sdf = new SimpleDateFormat("yyyy--MM--dd");
        //字元串
        String s = "2020:08--12";
        sdf.parse(s);//throws ParseException*/

         /* method1();*/

        People p1 = new People();
        p1.method2();

    }
    public  static  void method1() throws Exception{
           int a=0;
           int  i=10/a;
    }
}      

除了以上我們還可以自定義異常:類

2.4finally:用來釋放資源

用法:

}catch(異常類型  e){

  處理異常的操作;

}finally{

一定要執行的操作;比如:釋放連接配接資源

目的,就是連接配接資源建立之後,不管有沒有發生異常,連接配接資源必須釋放

除了挂掉虛拟機,fnally塊中的内容一定會執行

finally一定要結合try...catch使用嗎?不一定,還可以try{}finally{}

今日學習感受:其實java基礎前面還是很簡單,首先你要學會用,把java該掌握的核心技術,要做到熟練使用,然後在去深入研究,打好基礎很重要,希望自己不忘初心,繼續堅持,當然也要勞逸結合,一天24小時,我們可以這樣按8小時睡覺,8小時自由安排時間,8小時學習時間,當然你可以根據自己的自身情況安排。最後一句話:天道酬勤,相信你的付出終會有回報。