大數據之路week01–day02_2 集合方面的總結

  • 2019 年 11 月 12 日
  • 筆記

(初稿 太晚了,明天再進行補充)

1、對象數組(掌握)

  (1)數組既可以存儲基本數據類型,也可以存儲引用類型。它存儲引用類型的時候的數組就叫對象數組。

  (2)案例:

    用數組存儲5個學生對象,並遍曆數組。

 1 package day02;   2   3 /**   4 * @author WYH   5 * @version 2019年11月12日 下午10:28:33   6 */   7 public class test {   8     public static void main(String[] args) {   9         Students[] s = new Students[2];  10  11         Students s1 = new Students("xiao",21);  12         Students s2 = new Students("da",22);  13  14         s[0] = s1;  15         s[1] = s2;  16  17         for(int i = 0;i<s.length;i++) {  18             System.out.println(s[i]);  19         }  20  21  22     }  23  24 }

2、集合(Collection)(掌握)

  (1)集合的由來?

    我們學習的時Java — 面向對象 –操作很多對象 –存儲 — 容器(數組和StringBuffer)– 數組而數組得長度固定,所以不適合做變化得需求,Java就提供了集合供我們使用。

  (2)集合和數組得區別?

    A: 長度區別

      數組固定

      集合可變

    B: 內容區別

      數組可以是基本類型,也可以是引用類型

      集合只能是引用類型

    C: 元素內容

      數組只能存儲同一種類型

      集合可以存儲不同類型(其實集合一般存儲得也是同一種類型)

  (3)集合的繼承體系結構?

      由於需求不同,Java就提供了不同得集合類,而這多個集合類得數據結構不同,但是他們都是要提供存儲和遍歷功能得容器,我們把他們得共性不斷向上提取,

最終就形成了集合得繼承體系結構。

  Collection

    |–List

      |–ArrayList

      |–Vector

      |–LinkList

    |–Set

      |–HashSet

      |–TreeSet

  (4)Collection得功能概述(自己補齊)

    A: 添加功能

    B:刪除功能

    C: 判斷功能

    D: 獲取功能

    E: 長度功能

    F: 交集(了解)

    G: 把集合轉數組(了解)

  (5)Collection集合得遍歷

    A: 把集合轉數組(了解)

    (程式碼補充)

    B: 迭代器(集合專用方式)

              (程式碼補充)

  (6)迭代器

    A: 是集合得獲取元素得方式

    B: 是依賴於集合而存在得

    C:迭代器得原理和源碼

      a:為什麼定義為了一個介面而不是一個實現類(如果是實現類,那麼就要提供具體得實現方法,但是我們的集合有很多種,所以是一個介面)

      b: 看了看迭代器的內部類實現

  (7)Collecton集合的案例(遍歷方式 迭代器)

    集合的操作步驟:

      A: 創建集合對象

      B: 創建元素對象

      C: 把元素添加帶集合

      D: 遍歷集合

    A: 存儲字元串並遍歷

    (程式碼補充)

    B: 存儲自定義對象並遍歷

    (程式碼補充)

2、集合(List)(掌握)

  (1)List是Collection的子介面

    特點:有序(存儲順序和取出順序一致),可重複。

  (2)List的特有功能:(自己補齊)

    A: 添加功能

    B: 刪除功能

    C: 獲取功能

    D: 迭代器功能

    E: 修改功能

  (3)List集合的特有遍歷功能

    A: 由size()和get()結合。

    B: 程式碼演示

    (程式碼補充)(一種迭代器,一種for循環)

  (4)列表迭代器的特有功能:(了解)

    可以逆向遍歷,但是要先正向遍歷,所以毫無意義,基本不會使用。

  (5)並發修改異常

    A: 出現的異常

      迭代器遍歷集合,集合修改集合元素

    B: 原因

      迭代器是依賴集合二點,而集合的改變,迭代器並不知道。

    C: 解決方案

      a: 迭代器遍歷,迭代器修改(ListIterator)

        元素添加在剛剛迭代器的位置

        (程式碼補充

      b: 集合遍歷,集合修改(size()和get())

 

        元素添加在集合的末尾

        (程式碼補充)

  (6)常見數據結構

    A: 棧 先進後出

    B: 隊列 先進先出

    C: 數組 查詢快,增刪慢

    D: 鏈表 查詢嗎,慢,增刪快

  (7)List的子類特點(面試題)

    ArrayList

      底層數據結構是數組,查詢快,增刪慢。

      執行緒不安全,效率高。

    Vector

      底層數據結構是數組,查詢快,增刪慢。

      執行緒安全,效率低。

    LinkedList

      底層數據結構是鏈表,查詢慢,增刪快。

      執行緒不安全,效率高。

    到底使用誰呢?看需求?

    分析:

      要安全嗎?

        要:Vector(即使要,也不適用這個,後面再說)

        不要:ArrayLIst或者LinkedList

          查詢多:ArrayList

          增刪多:LinkedList

      都不知道選啥的時候,選ArrayList。