老讀者都知道,我是自學轉行到 java 的。那時迫於生存壓力,學得比較快,很多知識點僅停留在會用的層面。最近,光會用不知道原理,沒什麼意思。每次使用時都是機械性的 "熟練使用"。加之一直有迴歸基礎的想法,所以想在業餘時間覆盤 java 的基礎知識。知其然知其所以然是技術人的追求。
說到覆盤基礎,並不是所有的都會覆盤,沒那個時間更沒那個必要。比如,一些基礎的語法以及條件語句,極度簡單。這類是不需要覆盤的。思前想後,我覺得整個計劃應該從集合開始,而覆盤的方式就是讀源碼。
1、Java 爲什麼要有集合?
首先,java 是一門面嚮對象語言,操作對象是我們的日常。既然操作就需要有東西把對象存儲起來。於是容器就應運而生,初學者接觸到的第一個容器就是數組,但這遠遠不夠,根據不同的對象以及不同的業務,我們需要用到不同的容器。比如,不想要重複對象,我們就會想到用 set 容器,想要對象有序我們會用 List 。不管是 List、Set。他們都會有共性, 而 java 就根據這些共性,給我們提供了 Collection 集合。
2、Collection 接口框架圖
由上面的 Collection 接口框架圖,我們可以知道 Collection 是 List、Set、Queue 的父接口,看到這裏,你們可能會問,Map 哪去了?其實,Java 中的容器,包括 Collection 和 Map ,Map 是另外一個體系,所以我們今天先不講 Map 。
3、Collection 的方法
Collection 接口定義了以上待實現的方法。比如:
- size() 計算容器長度
- isEmpty() 是否爲空
- contains() 是否包含某個對象
- containsAll() 是否包含另一個集合的所有對象
- iterator() 上層接口 iterable 的方法,用於生成迭代對象,遍歷對象
- add() 添加一個對象
- add() 添加另一個集合的所有對象
- remove() 移除一個對象
- removeAll() 移除所有對象
- toArray() 把集合轉換成數組
- retainAll() 是否與另一個集合有交集
4、List 子接口
List 集合的特點是元素有序、可重複,它包含了 ArrayList、Vendor 和 LinkedList 這三個實現類。三者比較如下:
5、Set 子接口
Set 集合最大的特點是不允許重複元素,它有 HashSet、TreeSet、LinkedHashSet 、EnumSet 四個實現類,對比如下:
至於EnumSet 類,我還沒研究過怎麼使用,在網上查了下,它是專爲枚舉類設計的集合類,EnumSet 中的所有元素都必須是指定枚舉類型的枚舉值,具體的這裏先不做介紹,待我研究下用法以及場景,再專門介紹。
6、Queue 子接口
Queue 用的不多,它常用於模擬隊列這種數據結構,實現 FIFO 等數據結構。通常,隊列不允許隨機訪問隊列中的元素。在工作中,我還沒有使用過,待我研究過,再來跟大家分享。
推薦閱讀: