java中Collection的子介面List介面

2021-09-22 01:59:03 字數 1307 閱讀 4524

1.arraylist的原始碼分析:作為list介面的主要實現類,底層使用了object elementdata儲存,執行緒不安全,但效率高。

jdk 7情況下:

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

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

...list.add(0);  //如果2此次分新增導致底層elementdata陣列容量不夠,則擴容。預設情況下,擴容為原來的容量的1.5倍。,同時需要將原有陣列中的資料複製到新的陣列中。

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

jdk8中arraylist的變化:

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

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

...後續的新增和擴容與jdk7相同.

小結:jdk7中的arraylist的物件的建立類似於單例的餓漢式,而jdk8中arraylist物件的建立類似於單例的懶漢式,延遲了陣列的建立,節省記憶體。

2.linkedlist的原始碼分析:雙向鍊錶,內部沒有宣告陣列,而是定義了node型別的first和last,用於記錄首末元素。同時,定義內部類node,作為linkedlist中儲存資料的基本結構。對於頻繁的插入,刪除,使用此類。

linkedlist lidt = new liinkedlist();  //內部宣告了node型別的first和last屬性,預設為null

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

其中,node定義為:

private static class node

}

3.vector:作為list介面的古老實現類,底層使用object elementdata儲存,執行緒安全,但效率不高。

vector的原始碼分析:jdk7和jdk8中通過vector()構造器建立物件時,底層都建立了長度為10的陣列,在擴容方面。預設擴容為原來陣列的長度的2倍。

public static void text1()

}

java中的集合Collection

集合的特點 用於儲存物件的容器 儲存物件的引用 集合的長度是可變的,集合中不可以儲存基本資料型別值 person p new person arraylist a new arraylist al.add p 不表示將p這個物件放進了al這個容器裡了 表示了將p這個物件的位址放進al容器裡使al容器...

Java中Collection與Map的一些注意點

1.map 沒有繼承 collection 介面。2.collections是針對集合類的乙個幫助類,collection是乙個介面 3.collection沒有get 方法來取得某個元素。只能通過iterator 遍歷元素。4.容器類僅能持有物件引用 指向物件的指標 而不是將物件資訊copy乙份至...

Java中的Collection集合介面常用方法

collection 總介面 list 特徵 有序 可重複 arraylist 底層維護的是乙個object型別的陣列,如果使用無參構造方法建立arraylist集合,預設的容量為10 用帶有引數的構造方法,建立arraylist集合,傳入的initcapacity是多少,容量就是多少 特徵 增刪慢...