8.13JAVA-復習14(泛型 Collections工具類 異常)

1.泛型

  1. 比較器 Comparable Collections
    (Comparable)案例:實現(xiàn)對于List<Person> 年齡的升序**
    實現(xiàn)排序的步驟:
  2. 讓 Person 類實現(xiàn) Comparable<Person>
  3. 重寫compareTo 方法: 定義排序的規(guī)則
    ? 升序: this和 參數(shù)
    ? 降序: 參數(shù)和this
    (Collections)
不使用匿名內部類實現(xiàn): 自己寫一個Comparator的子類
     * Collections.sort(list,new IntegerComparator());
        System.out.println(list);*/
        
        //使用匿名內部類實現(xiàn)
        Collections.sort(list,new Comparator<Integer>() {
            /**
             * 用第一個和第二個比較:  升序
             * 第二個和第一個比較:   降序
             */
            @Override
            public int compare(Integer o1, Integer o2) {
                return o1 - o2;
            }
        }
);
        System.out.println(list);
    }
}

class IntegerComparator implements Comparator<Integer>{
    @Override
    public int compare(Integer o1, Integer o2) {
        return o2- o1;
    }
}

3.Collections工具類
public static <T> void sort(List<T> list) 排序,升序
public static <T> int binarySearch(List<?> list,T key) 二分查找,不存在返回負數(shù),只能針對升序集合
public static <T> T max(Collection<?> coll) 最大值
public static void reverse(List<?> list) 反轉
public static void shuffle(List<?> list) 隨機打亂
public static <T> void sort(List<T> list, Comparator<? super T> c) 排序,和比較器配合使用

4.一道大題

package Day13;
/*
        A:B,C,D,F,E,O;B:A,C,E,K;C:F,A,D,I;D:A,E,F,L;E:B,C,D,M,L;F:A,B,C,D,E,O,M;G:A,C,
        D,E,F;H:A,C,D,E,O;I:A,O;J:B,O;K:A,C,D;L:D,E,F;M:E,F,G;O:A,H,I,J

        1.獲取所有用戶對應的好友數(shù)量
        2 獲取指定兩個用戶的共同好友
        3 獲取兩兩人的共同好友
        */


import java.util.*;

public class Demo2 {
    public static void main(String[] args) {
        String st = " A:B,C,D,F,E,O;B:A,C,E,K;C:F,A,D,I;D:A,E,F,L;E:" +
                "B,C,D,M,L;F:A,B,C,D,E,O,M;G:A,C," +
                " D,E,F;H:A,C,D,E,O;I:A,O;J:B,O;K:A" +
                ",C,D;L:D,E,F;M:E,F,G;O:A,H,I,J";
        // number(st);
        //mutualfriend(st);
        mutualfriend1(st);
        //getSampleFriend(st);
    }

    //1.獲取所有用戶對應的好友數(shù)量
    public static void number(String st) {
    /*HashMap<String, ArrayList<String>> ob= new HashMap<>();
    ArrayList<String> obj = new ArrayList<>();*/
        String[] split = st.split(";");
        for (int i = 0; i < split.length; i++) {
            //按照":"來切 分成兩個部分 用戶和好友
            String[] split1 = split[i].split(":");//用戶
            String[] split2 = split1[1].split(",");//好友
            System.out.println(split1[0] + "的好友數(shù)" + split2.length);
            //可以用hashmap 把數(shù)量存入value
        }
    }

    //獲取指定兩個用戶的共同好友
    public static void mutualfriend(String st) {
        Scanner scanner = new Scanner(System.in);
        ArrayList<String> obj = new ArrayList<>();
        //重點....
        HashMap<String, ArrayList<String>> ob = new HashMap<>();
        String[] split = st.split(";");
        for (int i = 0; i < split.length; i++) {
            String[] split1 = split[i].split(":");
            String[] split2 = split1[1].split(",");
            //集合轉數(shù)組.....
            List<String> strings = Arrays.asList(split2);
            //構造方法把List 轉為ArrayList
            ArrayList<String> st1 = new ArrayList<>(strings);
            ob.put(split1[0], st1);
        }
        //System.out.println(ob);
        //以上 把數(shù)據(jù)都存入hashmap
        //
        System.out.println("請輸入兩個字母");
        System.out.println("請輸入第一個字母");
        String name1 = scanner.next();
        System.out.println("請輸入第二個字母");
        String name2 = scanner.next();
        String s = name1.toUpperCase();
        String s1 = name2.toUpperCase();
        //判斷是否包含改用戶
        /*if (!ob.containsKey(s) || !ob.containsKey(s1)) {
            System.out.println("沒有這個用戶");
            return;
        }*/
        //獲取 value值
        ArrayList<String> strings = ob.get(s);
        ArrayList<String> strings1 = ob.get(s1);
        // 比較 把交集放在strings 中
        strings.retainAll(strings1);
        if (strings.isEmpty()) {
            System.out.println(name1.toUpperCase() + "和" + name2.toUpperCase() + "沒有共同好友");
        } else {
            System.out.println(name1.toUpperCase() + "和" + name2.toUpperCase() + strings);
        }
    }
    public static void   mutualfriend1(String st){
        ArrayList<String> obj = new ArrayList<>();
        //重點....
        HashMap<String, ArrayList<String>> ob1 = new HashMap<>();
        String[] split = st.split(";");
        for (int i = 0; i < split.length; i++) {
            String[] split1 = split[i].split(":");
            String[] split2 = split1[1].split(",");
            //集合轉數(shù)組.....
            List<String> strings = Arrays.asList(split2);
            //構造方法把List 轉為ArrayList
            ArrayList<String> st1 = new ArrayList<>(strings);
            ob1.put(split1[0], st1);
        }
        //取出 key 放入ArrayList 中 使用ArrayList中的get()方法  注意 與hashmap中的get()方法是不同的
        Set<String> strings = ob1.keySet();
        ArrayList<String> strings1 = new ArrayList<>(strings);
        for (int i = 0; i < ob1.size(); i++) {
            for (int j = 1 +i; j < ob1.size(); j++) {
                String key1 = strings1.get(i);
                String key2 = strings1.get(j);
                ArrayList<String> strings2 = ob1.get(key1);
                //中間  temp的作用
                ArrayList<String> temp = new ArrayList<>(strings2);
                ArrayList<String> strings3 = ob1.get(key2);
//這里使用中間temp 是因為如果是string1則再次使用獲取string時 不在發(fā)生變化 get(key1) 已然發(fā)生變化
                temp.retainAll(strings3);
                if (temp.size() == 0){
                    System.out.println(key1 + "與" + key2 +"無共同好友");
                }
                else {
                    System.out.println(key1 + "與" + key2 + "的共同好友有" +temp);
                }

            }
        }
    }
    private static void getSampleFriend(String str) {
        //第一次切割  區(qū)分用戶和用戶之間
        String[] sp = str.split(";");

        HashMap<String, ArrayList<String>> hm = new HashMap<String, ArrayList<String>>();

        //第二次切割  將用戶和其對應的好友部分分裂
        for (String s : sp) {
            String[] persons = s.split(":");

            //第三次切割  將每個用戶對應的好友進行分離操作
            String[] friends = persons[1].split(",");

            //將好友數(shù)組變成集合
            List<String> list = Arrays.asList(friends);

            ArrayList<String> a = new ArrayList<>(list);

            //將用戶和他對應的好友都存進集合中
            hm.put(persons[0], a);
        }


        //求交集
        Scanner sc = new Scanner(System.in);

        System.out.println("請輸入第一個用戶名");
        String name1 = sc.next();

        System.out.println("請輸入第二個用戶名");
        String name2 = sc.next();

        //判斷集合中是否包含對應的用戶,如果不包含  就打印用戶不存在
        if (!hm.containsKey(name1.toUpperCase()) || !hm.containsKey(name2.toUpperCase())) {
            System.out.println("用戶不存在,請重新運行");
            return;
        }

        //將用戶對應的好友的集合取出  然后求交集
        ArrayList<String> a1 = hm.get(name1.toUpperCase());
        ArrayList<String> a2 = hm.get(name2.toUpperCase());

        a1.retainAll(a2);


        //判斷交集是否為空  如果為空  證明沒有共同好友
        if (a1.isEmpty()) {
            System.out.println(name1.toUpperCase() + "和" + name2.toUpperCase() + "沒有共同好友");
        } else {
            System.out.println(name1.toUpperCase() + "和" + name2.toUpperCase() + "的共同好友為:" + a1);
        }


    }

}

5.第二道大題
6.單鏈表
7.二叉樹

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末叫编,一起剝皮案震驚了整個濱河市霹抛,隨后出現(xiàn)的幾起案子卷谈,更是在濱河造成了極大的恐慌,老刑警劉巖端逼,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件污淋,死亡現(xiàn)場離奇詭異,居然都是意外死亡礁鲁,警方通過查閱死者的電腦和手機赁豆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來析二,“玉大人节预,你說我怎么就攤上這事叶摄“材猓” “怎么了?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵糠赦,是天一觀的道長柱衔。 經(jīng)常有香客問我樊破,道長,這世上最難降的妖魔是什么唆铐? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任哲戚,我火速辦了婚禮,結果婚禮上艾岂,老公的妹妹穿的比我還像新娘顺少。我一直安慰自己,他們只是感情好王浴,可當我...
    茶點故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布脆炎。 她就那樣靜靜地躺著,像睡著了一般氓辣。 火紅的嫁衣襯著肌膚如雪秒裕。 梳的紋絲不亂的頭發(fā)上钞啸,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天几蜻,我揣著相機與錄音,去河邊找鬼体斩。 笑死梭稚,一個胖子當著我的面吹牛,可吹牛的內容都是我干的絮吵。 我是一名探鬼主播弧烤,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼蹬敲!你這毒婦竟也來了暇昂?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤伴嗡,失蹤者是張志新(化名)和其女友劉穎话浇,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體闹究,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡幔崖,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了渣淤。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片赏寇。...
    茶點故事閱讀 38,622評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖价认,靈堂內的尸體忽然破棺而出嗅定,到底是詐尸還是另有隱情,我是刑警寧澤用踩,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布渠退,位于F島的核電站忙迁,受9級特大地震影響,放射性物質發(fā)生泄漏碎乃。R本人自食惡果不足惜姊扔,卻給世界環(huán)境...
    茶點故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望梅誓。 院中可真熱鬧恰梢,春花似錦、人聲如沸梗掰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽及穗。三九已至摧茴,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間埂陆,已是汗流浹背苛白。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留猜惋,地道東北人。 一個月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓培愁,卻偏偏與公主長得像著摔,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子定续,可洞房花燭夜當晚...
    茶點故事閱讀 43,490評論 2 348