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是多少,容量就是多少 特徵 增刪慢...