Java 第十二天(純乾貨)(帶你14天瞭解並掌握Java SE)

今日內容

  • Set集合特點和HashSet集合類
  • Map集合
  • HashMap集合的相關案例

01. Set集合的特點

總結:
    1. 存取無序
            無序: 在存儲的時候,底層會按照【特定】的順序進行排列
            jdk8+ :自動排序
                    存: bacd
                    取: abcd
    2. 無索引

    3. 不可以存儲重複的 : 可以保證元素的唯一性

            應用場景: 今後需要需求,對元素去重, 首先就要想到set集合

                    int[] arr = {11,22,22,33,33};

02. HashSet保證元素唯一性的原理

  • 重點, 必掌握內容!! 面試經常問!
問題1: HashSet集合保證元素唯一是依賴哪兩個方法?

        hashCode和equals方法配合使用的。

03. HashSet集合的練習存儲自定義對象並遍歷

04. HashSet集合的練習存儲自定義對象保證元素唯一性

  • 案例演示
總結:
    問題2: hashcode和equals這兩個方法是如何配合使用的? --> 死活整明白了.

        當我們調用集合的add方法添加元素的時候, 首先會調用該對象的hashCode方法計算出一個哈希值

            看集合中是否有相同的哈希值

                沒有: 存
                有:
                    調用equals方法逐個的進行比較

                            false : 存
                            true : 不存
  • LinkedHashSet:
特點: set集合當中唯一一個,能夠保證存取有序的集合(也能保證元素的唯一性)

05. 創建Map集合對象並添加元素

  • A:Map接口概述
    • K -- > key --> 鍵
    • V -- > Value --> 值
      • 鍵值對兒
    • 查看API可以知道:
      • 將鍵映射到值的對象
      • 一個映射不能包含重複的鍵 --> 鍵是唯一的
      • 每個鍵最多隻能映射到一個值 --> 一夫一妻制
  • B:Map接口和Collection接口的不同

    • Map是雙列的,Collection是單列的
    • Map的鍵唯一,Collection的子體系Set是唯一的
    • Map集合的【數據結構只針對【鍵】有效】,跟值無關;Collection集合的數據結構是【針對元素有效】

      HashMap - HashSet

      底層使用的是一套數據結構 -> 哈希表
      
      細節: HashSet單列集合的add方法, 底層依賴於雙列集合的put方法。
      
  • C: Map集合的添加方法

    • V put(K key, V value)

      • Map集合當中, 鍵是唯一的, 值是可以重複的
      • Map集合的數據結構, 針對於鍵有效.
      • put方法不但能用於添加, 還可以用於修改.
      • put方法的返回值, 是覆蓋掉的值. HashMap<String , Integer> hm = new HashMap<>(); hm.put("zhangsan", 23); // null hm.put("zhangsan", 24); // 23

      • 單列集合的add方法, 底層依賴於雙列集合的put方法.

06. Map集合的成員方法

  • V put(K key,V value):添加元素
  • void clear():移除所有的鍵值對元素
  • boolean isEmpty():判斷集合是否爲空
  • int size():返回集合中的鍵值對的對數

  • V remove(Object key):根據鍵刪除鍵值對元素

  • boolean containsKey(Object key):判斷集合是否包含指定的鍵
  • boolean containsValue(Object value):判斷集合是否包含指定的值

07. Map集合的獲取功能測試

  • V get(Object key):根據鍵獲取值
  • Set keySet():獲取所有鍵的集合
  • Collection values():獲取所有值的集合 Collection c = hm.values(); --> 瞭解

08. Map集合的遍歷之鍵找值

  • A:鍵找值思路:
    • 獲取所有鍵的集合
    • 遍歷鍵的集合,獲取到每一個鍵
    • 根據鍵找值
  • B:案例演示

    • Map集合的遍歷之鍵找值

      for(String key : hm.keySet()){ System.out.println(key + "..." + hm.get(key)); }

      keySet() : 返回的是所有鍵的集合

09. Map集合的遍歷之鍵值對對象找鍵和值

  • A:鍵值對對象找鍵和值思路:
    • 獲取所有鍵值對對象的集合
    • 遍歷鍵值對對象的集合,獲取到每一個鍵值對對象
    • 根據鍵值對對象找鍵和值
  • B:案例演示

10. Map集合的兩種遍厲

11. HashMap集合的練習鍵是String值是Student

  • 案例演示
需求:Map集合的遍歷
分析:
第一步:定義一個map集合,健是String類型,值是Student類型
第二步:向集合中添加元素
第三步:獲取集合中所有的鍵值對對象
第四步:遍歷所有的健值對對象
第五步:打印集合的鍵和值

12. HashMap集合

13. 集合的嵌套練習之ArrayList嵌套HashMap

  • 需求 ArrayList集合嵌套HashMap集合並遍歷。 定義一個ArrayList集合,它包含三個元素,每一個元素都是HashMap類型的。 每一個HashMap集合的鍵和值都是String類型的, 鍵:String 丈夫的姓名 值:String 妻子的姓名 給出如下的字符串數據,請用代碼實現需求。 第一個HashMap集合的元素: 孫策 大喬 周瑜 小喬 第二個HashMap集合的元素: 郭靖 黃蓉 楊過 小龍女 第三個HashMap集合的元素: 令狐沖 任盈盈 林平之 嶽靈珊

14. 集合的嵌套練習之HashMap嵌套ArrayList

  • 需求
  HashMap集合嵌套ArrayList集合並遍歷。
  定義一個HashMap集合,它包含三個元素,每一個元素的鍵是String類型,值是ArrayList類型。

  鍵:String          人物來自哪部電視劇
  值:ArrayList       人物的名稱

  每一個ArrayList集合的數據是String類型的。
  給出如下的字符串數據,請用代碼實現需求。


  第一個ArrayList集合的元素:(三國演義)
        諸葛亮
        趙雲
  第二個ArrayList集合的元素:(西遊記)
        唐僧
        孫悟空
  第三個ArrayList集合的元素:(水滸傳)
        武松
        魯智深

LinkedHashMap

  • Map集合中,可以保證鍵是唯一的,並且可以保證存取的順序一致

TreeSet

  • 作用: TreeSet集合的作用是用於給集合元素,【排序】

  • 基礎示例:

    TreeSet<String> ts = new TreeSet<>();
    ts.add("b");
    ts.add("c");
    ts.add("a");
    ts.add("d");
    System.out.println(ts);
  • 存儲自定義類型:
    使用TreeSet集合,存儲自定義類型
     *  
     *      現象:如果自定義類型,沒有做xxxxx, 運行的時候直接報錯,原因:不具備可比性
     * 
     *              重寫了hashCode和equals方法之後,依然報錯
     *                  結論:TreeSet的排序,跟這兩個方法沒有關係。
     * 
     *      解決過程:
     *          1. 讓類實現了Comparable<Person>接口,重寫了 compareTo方法
     *                  return 0 : 集合中只有第一個元素
     * 
     *          2. return 1 :
     *                  [Person [name=張三, age=23], Person [name=李四, age=24], Person [name=王五, age=25]]
     *          
     *          3. return -1:
     *                  [Person [name=王五, age=25], Person [name=李四, age=24], Person [name=張三, age=23]]
     * 
     * 
     *      思路:
     *          要想讓集合中的對象按照自己的意思進行排序,就需要對TreeSet集合的compareTo方法做處理
     * 
     *      結論:
     *          正序: this.age - o.age
     *          倒序: o.age - this.age

TreeMap

  • TreeMap集合的排序, 只針對鍵有效
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章