寫在前面
前面講的是物件導向中的常用類部分,下面讓我們來看看java中集合這部分的內容!在本文的最後給大家發一個題目,便於複習Java物件導向部分的知識!
集合
資料結構
-
棧和佇列
-
陣列和連結串列
-
樹
-
雜湊表
-
圖
本部分知識太多,就不一一列舉了。
瞭解更多
泛型
-
泛型類
格式:public class 類名<泛型型別1,…>
注意:泛型型別必須是引用型別。 -
泛型方法
格式:public <泛型型別> 返回型別 方法名(泛型型別 引數)
-
泛型介面
格式:public interface 介面名<泛型型別1,…>
-
泛型萬用字元
<?>
<?>
任意型別,若沒有明確,就是Object
及任意 Java 類。<? extends E>
向下限定,E 及其子類。<? super E>
向上限定,E 及其父類。
兩大繼承體系
Collection 介面
-
成員方法
-
boolean add(E e)
- 作用:將指定的元素
e
新增到集合中。如果集合中尚不存在該元素,成功新增返回true
;如果集合中已經存在該元素,則返回false
。 - 返回值:
true
如果元素成功新增,false
如果元素已存在。
- 作用:將指定的元素
-
boolean remove(Object o)
- 作用:從集合中移除指定的元素
o
。如果集合中存在該元素,移除成功返回true
;如果集合中不存在該元素,則返回false
。 - 返回值:
true
如果元素成功移除,false
如果元素不存在。
- 作用:從集合中移除指定的元素
-
void clear()
- 作用:移除集合中的所有元素,使集合變為空。
- 返回值:無返回值。
-
boolean contains(Object o)
- 作用:檢查集合是否包含指定的元素
o
。如果集合中存在該元素,則返回true
;否則返回false
。 - 返回值:
true
如果集合包含指定的元素;false
如果集合不包含該元素。
- 作用:檢查集合是否包含指定的元素
-
boolean isEmpty()
- 作用:檢查集合是否為空。如果集合中沒有任何元素,則返回
true
;否則返回false
。 - 返回值:
true
如果集合為空;false
如果集合包含元素。
- 作用:檢查集合是否為空。如果集合中沒有任何元素,則返回
-
int size()
- 作用:返回集合中元素的數量。
- 返回值:集合中元素的數量(一個整數)。
-
Object[] toArray()
- 作用:返回包含集合中所有元素的陣列。陣列的型別為
Object[]
。 - 返回值:包含集合中所有元素的陣列。
- 作用:返回包含集合中所有元素的陣列。陣列的型別為
-
<T> T[] toArray(T[] a)
- 作用:返回包含集合中所有元素的陣列。如果提供的陣列
a
足夠大,元素將被儲存在該陣列中;否則,建立一個新的陣列來儲存元素。 - 返回值:包含集合中所有元素的陣列。如果提供的陣列
a
足夠大,則返回a
;否則返回新建立的陣列。
- 作用:返回包含集合中所有元素的陣列。如果提供的陣列
-
Iterator<E> iterator()
- 作用:返回集合中元素的迭代器,可以透過迭代器遍歷集合中的元素。
- 返回值:集合中元素的
Iterator
。
-
boolean containsAll(Collection<?> c)
- 作用:檢查集合是否包含指定集合
c
中的所有元素。如果集合中包含c
中的所有元素,則返回true
;否則返回false
。 - 返回值:
true
如果集合包含所有c
中的元素;false
如果不包含。
- 作用:檢查集合是否包含指定集合
-
boolean addAll(Collection<? extends E> c)
- 作用:將指定集合
c
中的所有元素新增到當前集合中。如果當前集合由於新增而發生了變化,則返回true
;否則返回false
。 - 返回值:
true
如果集合發生變化;false
如果集合未發生變化。
- 作用:將指定集合
-
boolean removeAll(Collection<?> c)
- 作用:從當前集合中移除指定集合
c
中的所有元素。如果當前集合由於移除而發生了變化,則返回true
;否則返回false
。 - 返回值:
true
如果集合發生變化;false
如果集合未發生變化。
- 作用:從當前集合中移除指定集合
-
boolean retainAll(Collection<?> c)
- 作用:保留當前集合中與指定集合
c
中的元素相同的元素,移除所有其他元素。如果當前集合由於移除而發生了變化,則返回true
;否則返回false
。 - 返回值:
true
如果集合發生變化;false
如果集合未發生變化。
- 作用:保留當前集合中與指定集合
-
子介面
-
List
介面- 特點:元素有序且可以重複,有索引下標。
- 子類
-
ArrayList
- 底層資料結構:陣列
- 優點:查詢快
- 缺點:增刪慢,執行緒不安全
- 執行緒安全實現:使用泛型和
synchronized
關鍵字修飾類。
-
Vector
- 底層資料結構:陣列
- 優點:執行緒安全
- 缺點:效率低
-
LinkedList
- 底層資料結構:雙連結串列
- 優點:增刪快
- 缺點:查詢慢,執行緒不安全
-
-
Set
介面- 特點:元素唯一且無序。
- 子類
-
HashSet
- 底層資料結構:雜湊表
- 元素唯一性:透過
hashCode()
和equals()
實現。
-
LinkedHashSet
- 底層資料結構:雜湊表和雙連結串列
- 優點:雜湊表保證元素唯一性,雙連結串列保證元素有序。
-
TreeSet
- 底層資料結構:紅黑樹
- 排序方式:
- 自然排序:元素類實現
Comparable<元素類>
介面並重寫compareTo
方法。 - 比較器排序:使用實現了
Comparator
介面且重寫compare
方法的物件進行排序。
- 自然排序:元素類實現
-
-
-
遍歷方式
- 方式一:使用迭代器,利用
hasNext()
和next()
方法。 - 方式二:使用
for
迴圈,利用集合的size()
方法和get(索引值)
。 - 方式三:將集合轉成陣列,透過陣列的
length
屬性進行遍歷。
- 方式一:使用迭代器,利用
Map 介面
-
成員方法
-
V put(K key, V value)
- 作用:將指定的鍵
key
和對應的值value
存入對映中。如果對映中已經存在該鍵,則用新值替換舊值,並返回舊值;如果對映中沒有該鍵,則新增新鍵值對並返回null
。 - 返回值:舊值(如果鍵已存在),否則
null
。
- 作用:將指定的鍵
-
V remove(Object key)
- 作用:從對映中移除指定的鍵
key
及其對應的值。如果鍵存在,則將其對應的值移除並返回;如果鍵不存在,則返回null
。 - 返回值:被移除的值(如果鍵存在),否則
null
。
- 作用:從對映中移除指定的鍵
-
void clear()
- 作用:移除對映中的所有鍵值對,使對映變為空。
- 返回值:無返回值。
-
boolean containsKey(Object key)
- 作用:檢查對映是否包含指定的鍵
key
。如果對映中存在該鍵,則返回true
;否則返回false
。 - 返回值:
true
如果對映包含指定的鍵;false
如果對映不包含該鍵。
- 作用:檢查對映是否包含指定的鍵
-
boolean containsValue(Object value)
- 作用:檢查對映是否包含指定的值
value
。如果對映中存在該值,則返回true
;否則返回false
。 - 返回值:
true
如果對映包含指定的值;false
如果對映不包含該值。
- 作用:檢查對映是否包含指定的值
-
boolean isEmpty()
- 作用:檢查對映是否為空。如果對映中沒有任何鍵值對,則返回
true
;否則返回false
。 - 返回值:
true
如果對映為空;false
如果對映包含鍵值對。
- 作用:檢查對映是否為空。如果對映中沒有任何鍵值對,則返回
-
int size()
- 作用:返回對映中鍵值對的數量。
- 返回值:對映中鍵值對的數量(一個整數)。
-
V get(Object key)
- 作用:獲取指定鍵
key
對應的值。如果對映中存在該鍵,則返回其對應的值;如果鍵不存在,則返回null
。 - 返回值:指定鍵對應的值(如果鍵存在),否則
null
。
- 作用:獲取指定鍵
-
Set<K> keySet()
- 作用:返回對映中所有鍵的集合(
Set
)。可以透過這個集合遍歷所有的鍵。 - 返回值:包含對映中所有鍵的
Set
。
- 作用:返回對映中所有鍵的集合(
-
Collection<V> values()
- 作用:返回對映中所有值的集合(
Collection
)。可以透過這個集合遍歷所有的值。 - 返回值:包含對映中所有值的
Collection
。
- 作用:返回對映中所有值的集合(
-
Set<Map.Entry<K, V>> entrySet()
- 作用:返回對映中所有鍵值對的集合(
Set
)。每個鍵值對都表示為Map.Entry
物件,方便進行遍歷和操作。 - 返回值:包含對映中所有鍵值對的
Set
。每個鍵值對是Map.Entry<K, V>
物件。
- 作用:返回對映中所有鍵值對的集合(
-
遍歷方式
- 方式一:獲取所有鍵的集合,遍歷鍵集合,根據鍵獲取值。
- 方式二:獲取所有鍵值對物件的集合,遍歷集合,根據鍵值對物件獲取鍵和值。
-
子類
-
HashMap
- 底層資料結構:雜湊表
-
LinkedHashMap
- 底層資料結構:雜湊表和連結串列
-
TreeMap
- 底層資料結構:紅黑樹
-
物件導向的複習題:
1.一個類的4.0寫法:
建立一個`Person`類,包含`name`、`age`和`gender`三個私有欄位。編寫一個構造方法,用於初始化這些欄位,外界要能讀寫每個欄位,並提供一個公共的`toString`方法,用於列印`Person`物件的詳細資訊。
2.封裝與訪問控制:修改`Person`類,使其`age`欄位只能被增加,不能被減少。為此,你需要提供一個公共的`increaseAge`方法,並在該方法中增加`age`欄位的值。在`Person`類中新增一個私有方法,用於驗證`age`欄位的值是否合法(例如,年齡不能為負數)。在構造方法和`increaseAge`方法中呼叫該方法以確保物件狀態的有效性。
3.繼承:建立一個`Student`類,繼承自`Person`類。在`Student`類中新增一個`studentId`欄位和一個`getStudentId`方法。在`Student`類中重寫`toString`方法,使其同時列印`Person`類的欄位和`studentId`欄位。
4.多型:在`Person`類中新增一個名為`speak`的抽象方法,該方法返回一個字串,表示人物的說話內容。建立`Teacher`和`Student`兩個類,分別繼承自`Person`類,並實現`speak`方法。在`Teacher`類中,`speak`方法返回一條教育性的訊息;在`Student`類中,`speak`方法返回一條學習的訊息。編寫一個`School`類,其中包含一個`Person`型別的陣列。在`School`類中新增一個方法,該方法接收一個索引值,並呼叫陣列中對應索引位置物件的`speak`方法,列印出說話內容。在`Person`類中寫一個方法,表示該老師在備課。
5.介面:實現一個抽菸介面,給`Teacher`類加一個抽菸功能,寫一個`smoking`方法內容是xxx正在吸菸,無返回值,並在4的基礎上實現該介面來呼叫該方法。
效果展示: