進(jìn)階JAVA語(yǔ)言第九天

Set/Map/異常處理

學(xué)習(xí)目的

set和map跟前期學(xué)習(xí)的list的目的一樣寡具,學(xué)習(xí)他的主要方法可以方便后面的學(xué)習(xí)战秋,提高效率百侧。異常以及錯(cuò)誤時(shí)我們?cè)谇么a的時(shí)候最害怕的介却,當(dāng)看到他們時(shí)谴供,就感覺前功盡棄了,所以學(xué)習(xí)異常處理齿坷,讓我們懂得及時(shí)處理一些麻煩桂肌,以免對(duì)項(xiàng)目產(chǎn)生畏懼感。

知識(shí)點(diǎn)

  1. Set/Map
  2. HashSet
  3. TreeSet
  4. compareTo
  5. HashMap
  6. 鍵值對(duì)的遍歷
  7. 異常處理

解析

  1. Set/Map
    1.1 集合里面對(duì)象不能重復(fù)永淌, 如果重復(fù)加不進(jìn)去崎场,內(nèi)部使用HashMap來實(shí)現(xiàn) 鍵值對(duì) 鍵key不能重復(fù)。
    1.2 集合是無序的 遂蛀,添加的順序和存儲(chǔ)的順序無關(guān)谭跨。
    其使用了默認(rèn)排序:哈希算法(Hash)
    1.3 如何實(shí)現(xiàn)HashMap里面key不相同
    計(jì)算這個(gè)key對(duì)應(yīng)的對(duì)象的hash值。
    如:整數(shù):在對(duì)象的地址的基礎(chǔ)上按照一定的算法計(jì)算出來的一個(gè)整數(shù)李滴。
    如果兩個(gè)對(duì)象相同 那么計(jì)算出來的hash值就相同螃宙。

  2. HashSet

 HashSet<String> names = new HashSet<>();
        names.add("jack");
        names.add("merry");
        names.add("abc");

        names.removeIf(ele -> {
            return ele.compareTo("c") > 0;
        });
  1. TreeSet(可以排序的集合)
  TreeSet<Person> score = new TreeSet<>();

        Person p1 = new Person("jack",20);
        Person p2 = new Person("jack",30);
        Person p3 = new Person("rose",20);

        score.add(p1);
        score.add(p2);
        score.add(p3);

equals :比較的是對(duì)象內(nèi)部的內(nèi)容

  1. compareTo
    使用的兩個(gè)對(duì)象必須實(shí)現(xiàn)Comparable接口的compareTo方法
    在compareTo里面實(shí)現(xiàn)具體該如何比較:
  System.out.println(p1==p2);
    }
}

class Person implements Comparable{
    String name;
    int age;

    public Person(String name, int age){
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    @Override
    public int compareTo(Object o) {
        //1. 判斷o對(duì)象是不是peron的一個(gè)對(duì)象
        if (o instanceof Person){
            Person o1 = (Person)o;
            //自己規(guī)定比較的策略
            if (this.age != o1.age){
                return this.age - o1.age;
            }else{
                //年齡相同的情況下 再比姓名的字母
                return this.name.compareTo(o1.name);
            }
        }else{
            return -1;
        }
    }
  1. HashMap 集合
  • 存儲(chǔ)數(shù)據(jù)的特點(diǎn):鍵key-值value
    key不能重復(fù) 可以是任意的對(duì)象類型 通常使用字符串String。
 HashMap<String,Integer> score = new HashMap<>();
  • 方法:
方法 用途 實(shí)例
put 添加對(duì)象所坯,鍵值對(duì) score.put("Chinese",89);
size 獲取鍵值對(duì)的個(gè)數(shù) score.size();
keySet 獲取所有的key System.out.println(score.keySet());
values 獲取所有的value System.out.println(score.values());
entrySet 獲取Entry:key-value System.out.println(score.entrySet());
get 獲取一個(gè)鍵key對(duì)應(yīng)的值 System.out.println(score.get("English"));
  1. 鍵值對(duì)的遍歷
    6.1 通過遍歷key來得到每一個(gè)key對(duì)應(yīng)的值
for (String key: score.keySet()){
            //通過key得到值
            int s = score.get(key);
            System.out.println("key:"+key+" value:"+s);
        }

6.2 通過EntrySet 得到Entry對(duì)象的集合

//  一個(gè)Entry管理一個(gè)鍵值對(duì) getKey getValue
        Set<Map.Entry<String, Integer>> entrys = score.entrySet();
        for (Map.Entry entry: entrys){
            //得到Entry對(duì)應(yīng)的key
            String key = (String)entry.getKey();

            //獲取Entry對(duì)應(yīng)的值
            Integer value = (Integer)entry.getValue();

            System.out.println("key:"+key+" value:"+value);
        }
  1. 異常處理
    處理運(yùn)行過程中出現(xiàn)的不可控的錯(cuò)誤(錯(cuò)誤:error谆扎,區(qū)別)
    方法:
  1. try{
    執(zhí)行的代碼
    可能出現(xiàn)異常
    一旦出現(xiàn)異常 系統(tǒng)自動(dòng)為我們創(chuàng)建一個(gè)異常對(duì)象 并拋出
    }catch(NullPointerException e){
    如果需要自己處理異常就catch
    }catch(Exception e){
    如果有多個(gè)異常 可以使用多個(gè)catch來捕獲
    如果有多個(gè)異常 catch的順序是從小到大
    }finally{
    不管有沒有異常finally都會(huì)被執(zhí)行
    處理資源回收 如網(wǎng)絡(luò)連接 數(shù)據(jù)庫(kù)連接 I/O流
    }
 public static void main(String[] args) {
        int a=0;
        int b=20;
        FileReader fr=null;
        try{
            int c=b/a;
            //它異常之后后面的代碼將不會(huì)運(yùn)行
            //System.out.println("hello");
            FileReader f=new FileReader("");
        }catch(ArithmeticException e){
            System.out.println(e.getMessage());
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }finally {
           try {
               fr.close();
           } catch (IOException e) {
}

注意:如果異常出現(xiàn)后面的代碼將不會(huì)出現(xiàn),try代碼塊不要捕獲太多的異常芹助。

  1. 關(guān)閉資源:
//圓括號(hào)里面只能添加可以關(guān)閉的對(duì)象
        //實(shí)現(xiàn)了Closeable接口的對(duì)象
        //如果出現(xiàn)異常 系統(tǒng)自動(dòng)關(guān)閉這個(gè)資源
        try(FileReader fr1=new FileReader("DD")){
            //使用對(duì)象
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
  1. 使用throws拋出異常 給外部處理
try {
            TException.test();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
public class myclass throws FileNotFoundException
  1. 當(dāng)特殊情況 自己可以選擇拋出異常 用throw堂湖。
    throw new IllegalAccessException();
class TException{
    //多個(gè)異常用‘闲先,’隔開
    public static void test()throws FileNotFoundException,NullPointerException{
        FileReader fr=new FileReader("");
    }
    public static void test2()throws IllegalAccessException{
        if (2>1){
            throw new IllegalAccessException();
        }
    }
  1. 自定義異常類
class XJTException extends Exception{
    //1.提供一個(gè)無參構(gòu)造方法
    public XJTException(){

    }
    //2.提供一個(gè)有參構(gòu)造方法 參數(shù)是一個(gè)字符串
    public XJTException(String desc){
        super(desc);
    }
}

應(yīng)用:

public static void test3()throws XJTException{
        StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace();
        StackTraceElement e = stackTrace[2];
        String detail = e.getFileName()+"->"+e.getMethodName()+"->"+e.getLineNumber();
        throw new XJTException("自己的異常類:無用的實(shí)現(xiàn)"+detail);
    }

感悟

學(xué)習(xí)Java快要結(jié)束了,但是感覺什么都不懂无蜂,有很多知識(shí)點(diǎn)還是不明確伺糠。感覺沒有一條線把他們串起來。所以就覺得學(xué)的很雜酱讶,記的好亂退盯,很混彼乌。還是要自己去多去做總結(jié)吧泻肯,多去了解。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末慰照,一起剝皮案震驚了整個(gè)濱河市灶挟,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌毒租,老刑警劉巖稚铣,帶你破解...
    沈念sama閱讀 221,820評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異墅垮,居然都是意外死亡惕医,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門算色,熙熙樓的掌柜王于貴愁眉苦臉地迎上來抬伺,“玉大人,你說我怎么就攤上這事灾梦∠康觯” “怎么了?”我有些...
    開封第一講書人閱讀 168,324評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵若河,是天一觀的道長(zhǎng)能岩。 經(jīng)常有香客問我,道長(zhǎng)萧福,這世上最難降的妖魔是什么拉鹃? 我笑而不...
    開封第一講書人閱讀 59,714評(píng)論 1 297
  • 正文 為了忘掉前任,我火速辦了婚禮鲫忍,結(jié)果婚禮上毛俏,老公的妹妹穿的比我還像新娘。我一直安慰自己饲窿,他們只是感情好煌寇,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,724評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著逾雄,像睡著了一般阀溶。 火紅的嫁衣襯著肌膚如雪腻脏。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,328評(píng)論 1 310
  • 那天银锻,我揣著相機(jī)與錄音永品,去河邊找鬼。 笑死击纬,一個(gè)胖子當(dāng)著我的面吹牛鼎姐,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播更振,決...
    沈念sama閱讀 40,897評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼炕桨,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了肯腕?” 一聲冷哼從身側(cè)響起献宫,我...
    開封第一講書人閱讀 39,804評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎实撒,沒想到半個(gè)月后姊途,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,345評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡知态,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,431評(píng)論 3 340
  • 正文 我和宋清朗相戀三年捷兰,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片负敏。...
    茶點(diǎn)故事閱讀 40,561評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡贡茅,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出原在,到底是詐尸還是另有隱情友扰,我是刑警寧澤,帶...
    沈念sama閱讀 36,238評(píng)論 5 350
  • 正文 年R本政府宣布庶柿,位于F島的核電站村怪,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏浮庐。R本人自食惡果不足惜甚负,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,928評(píng)論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望审残。 院中可真熱鬧梭域,春花似錦、人聲如沸搅轿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,417評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)璧坟。三九已至既穆,卻和暖如春赎懦,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背幻工。 一陣腳步聲響...
    開封第一講書人閱讀 33,528評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工励两, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人囊颅。 一個(gè)月前我還...
    沈念sama閱讀 48,983評(píng)論 3 376
  • 正文 我出身青樓当悔,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親踢代。 傳聞我的和親對(duì)象是個(gè)殘疾皇子盲憎,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,573評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • 一焙畔、基本數(shù)據(jù)類型 注釋 單行注釋:// 區(qū)域注釋:/* */ 文檔注釋:/** */ 數(shù)值 對(duì)于byte類型而言...
    龍貓小爺閱讀 4,268評(píng)論 0 16
  • Java集合類可用于存儲(chǔ)數(shù)量不等的對(duì)象,并可以實(shí)現(xiàn)常用的數(shù)據(jù)結(jié)構(gòu)如棧,隊(duì)列等,Java集合還可以用于保存具有映射關(guān)...
    小徐andorid閱讀 1,946評(píng)論 0 13
  • java筆記第一天 == 和 equals ==比較的比較的是兩個(gè)變量的值是否相等掸读,對(duì)于引用型變量表示的是兩個(gè)變量...
    jmychou閱讀 1,504評(píng)論 0 3
  • 九種基本數(shù)據(jù)類型的大小串远,以及他們的封裝類。(1)九種基本數(shù)據(jù)類型和封裝類 (2)自動(dòng)裝箱和自動(dòng)拆箱 什么是自動(dòng)裝箱...
    關(guān)瑋琳linSir閱讀 1,891評(píng)論 0 47
  • Mr_Oldman閱讀 172評(píng)論 0 0