1. 程式人生 > >阿里P7年終總結:Java之集合Collection總覽

阿里P7年終總結:Java之集合Collection總覽

一、集合(Collection)介紹

1.1為什麼需要Collection

  1. Java是一門面向物件的語言,就免不了處理物件
  2. 為了方便操作多個物件,那麼我們就得把這多個物件儲存起來
  3. 想要儲存多個物件(變數),很容易就能想到一個 容器
  4. 常用的容器我們知道有–>StringBuffered,陣列(雖然有物件陣列,但是陣列的長度是不可變的!)
  5. 所以,Java就為我們提供了集合(Collection)~

1.2陣列和集合的區別
接下來,我們可以對陣列和集合的區別來分析一下:

陣列和集合的區別:

1:長度的區別

  • 陣列的長度固定
  • 集合的長度可變

2:內容不容

  • 陣列儲存的是同一種類型的元素
  • 集合可以儲存不同型別的元素(但是一般我們不這樣幹…)

3:元素的資料型別

  • 陣列可以儲存基本資料型別,也可以儲存引用型別
  • 集合只能儲存引用型別(你儲存的是簡單的int,它會自動裝箱成Integer)

1.3Collection的由來與功能
Collection的由來:

  • 集合可以儲存多個元素,但我們 對多個元素也有不同的需求
  • 多個元素,不能有相同的
  • 多個元素,能夠按照某個規則排序
  • 針對不同的需求:java就提供了很多集合類,多個集合類的資料結構不同。但是,結構不重要,重要的是 能夠儲存東西,能夠判斷,獲取
  • 把集合 共性的內容不斷往上提取 ,最終形成集合的繼承體系---->Collection

Collection的大致結構體系是這樣的:在這裡插入圖片描述
但是,一般我們要掌握的並不需要那麼多,只需要掌握一些常用的集合類就行了。下面我 圈出來的那些 :在這裡插入圖片描述
再次精減:在這裡插入圖片描述
Collection的基礎功能:在這裡插入圖片描述

在這裡插入圖片描述

二、迭代器(Iterator)介紹

我們可以發現Collection的原始碼中繼承了Iterable,有iterator()這個方法…在這裡插入圖片描述
點進去看了一下,Iterable是一個介面:在這裡插入圖片描述
它有iterator()這個方法,返回的是 Iterator
再來看一下,Iterator也是一個介面,它只有三個方法:

  • hasNext()
  • next()
  • remove()
    在這裡插入圖片描述
    可是,我們沒能找到對應的實現方法,只能往Collection的子類下找找了,於是我們找到了—>ArrayList(該類後面會說)

於是,我們在ArrayList下找到了iterator實現的身影:它是在ArrayList以 內部類的方式實現 的!並且,從原始碼可知: Iterator實際上就是在遍歷集合在這裡插入圖片描述
所以說:我們 遍歷集合(Collection)的元素都可以使用Iterator ,至於它的具體實現是以內部類的方式實現的!在這裡插入圖片描述

三、List集合介紹

從上面已經可以看到了,Collection主要學習集合的型別兩種: Set和List ,這裡主要講解List!
我們來看一下List介面的方法,比Collection多了一點點:

  • List集合的 特點 就是: 有序(儲存順序和取出順序一致),可重複

在這裡插入圖片描述
Collection返回的是Iterator迭代器介面,而List中又有它自己對應的實現–> ListIterator介面
該介面比普通的Iterator介面多了幾個方法:在這裡插入圖片描述
從方法名就可以知道: ListIterator可以往前遍歷,新增元素,設定元素

3.1List集合常用子類
List集合常用的子類有三個:

  • ArrayList 底層資料結構是陣列。執行緒不安全
  • LinkedList 底層資料結構是連結串列。執行緒不安全
  • Vector 底層資料結構是陣列。執行緒安全

現在知道有三個常用的集合類即可,後面會開新的文章來講解的~

四、Set集合介紹

從Set集合的方法我們可以看到:方法沒有比Collection要多

Set集合的特點是: 元素不可重複

4.1Set集合常用子類
HashSet集合
A:底層資料結構是雜湊表(是一個元素為連結串列的陣列)
TreeSet集合
A:底層資料結構是紅黑樹(是一個自平衡的二叉樹)
B:保證元素的排序方式
LinkedHashSet集合
A::底層資料結構由雜湊表和連結串列組成。

歡迎大家加入Java高階架構進階群:854180697 本群提供免費的學習指導 架構資料 以及免費的解答,不懂得問題都可以在本群提出來
還會有職業生涯規劃以及面試指導,進群修改群備註:開發年限-地區-經驗,方便架構師解答問題