更新時間:2020-07-09 16:11:50 來源:動力節點 瀏覽2628次
Java中可變數組的原理就是不斷的創建新的數組,將原數組加到新的數組中。List集合是有序的,Developer可對其中每個元素的插入位置進行精確地控制,可以通過索引來訪問元素,遍歷元素。在List集合中,我們常用到ArrayList和LinkedList這兩個類。其中,ArrayList底層通過數組實現,隨著元素的增加而動態擴容。而LinkedList底層通過鏈表來實現,隨著元素的增加不斷向鏈表的后端增加節點。ArrayList是Java集合框架中使用最多的一個類,是一個數組隊列,線程不安全集合。它繼承于AbstractList,實現了List,RandomAccess,Cloneable,Serializable接口。
ArrayList實現List,得到了List集合框架基礎功能;
ArrayList實現RandomAccess,獲得了快速隨機訪問存儲元素的功能,RandomAccess是一個標記接口,沒有任何方法;
ArrayList實現Cloneable,得到了clone()方法,可以實現克隆功能;
ArrayList實現Serializable,表示可以被序列化,通過序列化去傳輸,典型的應用就是hessian協議。
Java List的常用操作
list中添加,獲取,刪除元素;
添加方法是:.add(e);
獲取方法是:.get(index);
刪除方法是:.remove(index);按照索引刪除;.remove(Object o);按照元素內容刪除;
利用list中索引位置重新生成一個新的list(截取集合);
方法:.subList(fromIndex,toIndex);.size();該方法得到list中的元素數的和
去重復;
list中根據索引將元素數值改變;
注意.set(index,element);和.add(index,element);的不同;
List的子類
1、LinkedList類
LinkedList實現了List接口,允許null元素。此外LinkedList提供額外的get,remove,insert方法在LinkedList的首部或尾部。這些操作使LinkedList可被用作堆棧(stack),隊列(queue)或雙向隊列(deque)。
注意LinkedList沒有同步方法。如果多個線程同時訪問一個List,則必須自己實現訪問同步。一種解決方法是在創建List時構造一個同步的List:
2、ArrayList類
ArrayList實現了可變大小的數組。它允許所有元素,包括null。ArrayList沒有同步。
size,isEmpty,get,set方法運行時間為常數。但是add方法開銷為分攤的常數,添加n個元素需要O(n)的時間。其他的方法運行時間為線性。
每個ArrayList實例都有一個容量(Capacity),即用于存儲元素的數組的大小。這個容量可隨著不斷添加新元素而自動增加,但是增長算法并沒有定義。當需要插入大量元素時,在插入前可以調用ensureCapacity方法來增加ArrayList的容量以提高插入效率。
和LinkedList一樣,ArrayList也是非同步的(unsynchronized)。
特點是:尋址容易,插入和刪除困難;
3、Vector類
Vector非常類似ArrayList,但是Vector是同步的。由Vector創建的Iterator,雖然和ArrayList創建的Iterator是同一接口,但是,因為Vector是同步的,當一個Iterator被創建而且正在被使用,另一個線程改變了Vector的狀態(例如,添加或刪除了一些元素),這時調用Iterator的方法時將拋出ConcurrentModificationException,因此必須捕獲該異常。
4、Stack類
Stack繼承自Vector,實現一個后進先出的堆棧。Stack提供5個額外的方法使得Vector得以被當作堆棧使用。基本的push和pop方法,還有peek方法得到棧頂的元素,empty方法測試堆棧是否為空,search方法檢測一個元素在堆棧中的位置。Stack剛創建后是空棧。
以上就是動力節點java培訓機構的小編針對“Java編程基礎中list的用法”的內容進行的回答,希望對大家有所幫助,如有疑問,請在線咨詢,有專業老師隨時為你服務。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習