Collection子介面 List介面

2021-10-17 15:41:10 字數 2071 閱讀 6745

3. 常用實現類:

4. 原始碼分析(難點)

4.2 linkedlist的原始碼分析:

4.3 vector的原始碼分析:

5. 儲存的元素的要求:

1. 儲存的資料特點:儲存序的、可重複的資料。

2. 常用方法:(記住)

增:add

(object obj)

刪:remove

(int index)

/remove

(object obj)

改:set

(int index, object ele)

查:get

(int index)

插:add

(int index, object ele)

長度:size

()

遍歷:

① iterator迭代器方式

② 增強for迴圈

③ 普通的迴圈

3. 常用實現類:

|----collection介面:單列集合,用來儲存乙個乙個的物件

|----list介面:儲存序的、可重複的資料。 -->「動態」陣列,替換原的陣列

|----arraylist:作為list介面的主要實現類;執行緒不安全的,效率高;底層使用object elementdata儲存

|----linkedlist:對於頻繁的插入、刪除操作,使用此類效率比arraylist高;底層使用雙向鍊錶儲存

|----vector:作為list介面的古老實現類;執行緒安全的,效率低;底層使用object elementdata儲存

4. 原始碼分析(難點)

4.1 arraylist的原始碼分析:

1 jdk 7情況下

arraylist list = new arraylist();//底層建立了長度是10的object陣列elementdata

list.add(123);//elementdata[0] = new integer(123);

list.add(11);//如果此次的新增導致底層elementdata陣列容量不夠,則擴容。

預設情況下,擴容為原來的容量的1.5倍,同時需要將原有陣列中的資料複製到新的陣列中。

結論:建議開發中使用帶參的構造器:arraylist list = new arraylist(int capacity)

2 jdk 8中arraylist的變化:

arraylist list = new arraylist();//底層object elementdata初始化為{}.並沒建立長度為10的陣列

list.add(123);//第一次呼叫add()時,底層才建立了長度10的陣列,並將資料123新增到elementdata[0]

後續的新增和擴容操作與jdk 7 無異。

3 小結:
jdk7中的arraylist的物件的建立類似於單例的餓漢式,而jdk8中的arraylist的物件

的建立類似於單例的懶漢式,延遲了陣列的建立,節省記憶體。

4.2 linkedlist的原始碼分析:
linkedlist list = new linkedlist(); 內部宣告了node型別的first和last屬性,預設值為null

list.add(123);//將123封裝到node中,建立了node物件。

其中,node定義為:體現了linkedlist的雙向鍊錶的說法

private

static

class

node

}

4.3 vector的原始碼分析:
jdk7和jdk8中通過vector()構造器建立物件時,底層都建立了長度為10的陣列。

在擴容方面,預設擴容為原來的陣列長度的2倍。

5. 儲存的元素的要求:
新增的物件,所在的類要重寫equals()方法

面試題:arraylist、linkedlist、vector者的異同?

Collection子介面 Set介面

1.儲存的資料特點 無序的 不可重複的元素 具體的以hashset為例說明 無序性 不等於隨機性。儲存的資料在底層陣列中並非照陣列索引的順序新增,而是根據資料的雜湊值決定的。不可重複性 保證新增的元素照equals 判斷時,不能返回true.即 相同的元素只能新增乙個。2.元素新增過程 以hashs...

Collection子介面 Set介面

無序性不等於隨機性。儲存的資料在底層陣列中並非照陣列索引的順序新增,而是根據資料的雜湊值決定的。test public void test 保證新增的元素照equals 判斷時,不能返回true,即相同的元素只能新增乙個。test public void test 我們向hashset中新增元素a,...

collection的子介面set

set介面 特點 無序,不可重複!允許null元素1.hashset 內部封裝hashmap 非執行緒安全a.首先判斷hashcode 使用物件的hashcode來判斷物件加入的位置,同時也會與其他已經加入的物件的hashcode進行 比較,如果沒有相等的hashcode,hashset就會假設物件...