Java SE 基礎 集合(1)

2021-07-26 12:46:57 字數 4063 閱讀 5224

》1.儲存物件可以考慮:陣列、集合

》2.陣列儲存物件的弊端:一旦建立,其長度不可變

》3.集合: 分為 collection 和 map 兩種體系。

①collection 介面:

》set:元素無序、不可重複的集合

》list:元素有序、可重複的集合

②map 介面:具有對映關係「key-value對」 的集合。

collection 介面

-----list介面:儲存有序的,可以重複的元素

---arraylist(主要的實現類)、linkedlist、vector 實現類

-----set介面:儲存無序的,不可重複的元素

---hashset、linkedhashset、treeset 實現類

map 介面 :儲存「鍵值對」的資料

---hashmap、linkedhashmap、treemap、hashtable(子類:properties)實現類

以下不一一介紹,只說兩個,可查api

》1.contains(object obj);

判斷集合中是否包含指定的obj 元素,如果包含,返回true,否則返回false。

注意:判斷的依據 是根據元素所在的類的equals()方法進行判斷的

如果存入集合中的元素是自定義類的物件。要求:自定義類要重寫equals()方法!

》2.集合遍歷方法

iterator():

》返回乙個iterator 介面實現類的物件,用其來實現對集合的遍歷。

》①collection 物件.iterator()方法獲取iterator 物件

②iterator 物件.hasnext()方法配合 iterator物件.next()方法

(1)arraylist 實現類

list 是collection 的子介面,所以collection 中的15個方法他都能用。並在此基礎上,新增了 根據索引 來操作集合元素的方法。如下:

//void add(int index, e element)

在指定的索引位置新增元素 element,index 從0開始。

//void addall(int index, collection c)

//object get(int index)

獲取指定索引的元素。

//object remove(int index)

刪除指定索引位置的元素。

//object set(int index, object el)

設定指定索引位置的元素為 el

//int indexof(object obj)

返回obj 在集合中首次出現的位置,沒有的話,返回-1。

//int lastindexof(object obj)

返回obj 在集合中最後一次出現的位置,沒有的話,返回-1。

//list sublist(int fromindex,int toindex)

返回從fromindex 到 toindex 結束(左閉右開)的乙個子list

list 常用的方法:

增(add(object obj))

刪(remove)

改(set(int index, object obj))

查(get(int index))

插(add(int index, object ele))

長度(size())

(2)linkedlist 類

1.在底層以鍊錶的形式存在,但還是可以通過索引獲取其中的內容。

2.適用於 對於頻繁的插入、刪除操作。

(3)vector類

執行緒安全,但效率要低於arraylist

1.set介面:儲存無序的,不可重複的元素。

---hashset(主要實現類)

---linkedhashset

---treeset 實現類

2.set 中常用的方法都是collection 下定義的。

3.set 儲存的元素是無序的,不可重複的!

》無序性 不代表 隨機性。真正的無序性 指的是元素在底層儲存的位置是無序的。根據hash值來存。

》不可重複性:當向set 中新增進相同的元素的時候,後面的這個不能新增進去。

說明:要求新增進set 中的元素所在的類,一定要重寫equals() 和 hashcode()方法。進而保證set 中元素的不可重複性。

而新增進list 中的元素的所在的類,只需重寫equals()方法即可。

4.set 中的元素如何儲存?使用 雜湊演算法。

當向 set 中新增物件時,首先呼叫此物件所在類的hashcode()方法,計算此物件的雜湊值,此雜湊值決定了此物件在set 中的儲存位置。若此位置沒有物件儲存,則這個物件直接儲存到此位置。若此位置已有物件儲存,再通過equals()比較這兩個物件是否相同。如果相同,後乙個物件就不能再新增進來。萬一返回false呢,都儲存(不建議)。

要求:hashcode()方法要與equals()方法一致。

5.同樣可以用iterator()方法來對其進行遍歷。

linkedhashset

linkedhashset :

1. 使用鍊錶維護了乙個新增進集合中的順序,導致當我們遍歷linkedhashset集合元素時,是按照新增進去的順序遍歷的。

2.但這個linkedhashset在記憶體中存的還是無序的。

3.linkedhashset 插入效能略低於 hashset,但在 迭代訪問set 裡的全部元素 時有很好的效能。

treeset

1.向treeset 中新增的元素必須是同乙個類的。

2.可以按照新增進集合中的元素的指定的順序遍歷。像string。。。包裝類等預設按照從小到大的順序遍歷。

3.當向treeset 中新增自定義類的物件時,有兩種排序方式:①自然排序 ②定製排序

4.自然排序:當自定義類 沒有實現comparable 介面時,當向treeset 新增自定義類物件,會報錯classcastexception。這個comparable 介面中的方法compareto()方法是確定按照哪個屬性排列。

5.向treeset 中新增元素時,首先按照compareto ()方法進行比較,一旦返回0,雖然僅是兩個物件的此屬性值相同,但是程式會認為這兩個物件是相通的,進而後乙個物件不能新增進來。

要求:compareto() 與hashcode() 以及equals()方法保持一致。

重寫的compareto()方法

6.定製排序:

1)建立乙個實現comparator 介面的類物件

//向treeset 中新增自定義類的物件,在此compare()方法中,指明是按照自定義類的哪個屬性排序的。

2)將此物件作為形參傳遞給treeset 的構造器中。

3)向treeset 中新增comparator 介面中的compare 方法中涉及的類的物件。

要求:compare()方法與hashcode() 以及equals()方法保持一致。

JAVASE基礎(十一)

內部類 在乙個類的內部定義另外乙個類,那麼另外乙個類則稱作為內部類 內部類的class檔名 外部類 內部類.class 成員內部類 成員內部類的訪問方式 方式一 在外部類提供乙個方法建立內部類的物件進行訪問。方式二 在其他類中直接建立內部的物件進行訪問。格式 外部類.內部類 變數名 new 外部類 ...

javaSE 集合與佇列(list)

1.list arraylist 代表長度可以改變得陣列。可以對元素進行隨機的訪問,向 arraylist 中插入與刪除元素的速度慢。linkedlist 在實現中採用鍊錶資料結構。插入和刪除速度快,訪問速度慢。vector jdk1.5之後就使用arraylist替換了。arraylist內部有個...

java基礎 集合1

1 陣列和集合的區別,陣列存放同一型別的物件,集合可以存放不同型別的物件 陣列長度一定,集合長度不一定 2 資料在記憶體中的儲存結構稱為資料結構 3 集合和陣列存放的都是物件的位址 4 list有序 可以重複的 凡是可以操作角標的方法都是特有方法,增刪改查 增 add addall 刪 remove...