Java中可變數(shù)組的原理就是不斷的創(chuàng)建新的數(shù)組,將原數(shù)組加到新的數(shù)組中。List集合是有序的,Developer可對其中每個元素的插入位置進(jìn)行精確地控制,可以通過索引來訪問元素,遍歷元素。在List集合中,我們常用到ArrayList和linkedList這兩個類。其中,ArrayList底層通過數(shù)組實現(xiàn),隨著元素的增加而動態(tài)擴容。而linkedList底層通過鏈表來實現(xiàn),隨著元素的增加不斷向鏈表的后端增加節(jié)點。ArrayList是Java集合框架中使用最多的一個類,是一個數(shù)組隊列,線程不安全集合。它繼承于AbstractList,實現(xiàn)了List,RandomAccess,Cloneable,Serializable接口。
ArrayList實現(xiàn)List,得到了List集合框架基礎(chǔ)功能;
ArrayList實現(xiàn)RandomAccess,獲得了快速隨機訪問存儲元素的功能,RandomAccess是一個標(biāo)記接口,沒有任何方法;
ArrayList實現(xiàn)Cloneable,得到了clone()方法,可以實現(xiàn)克隆功能;
ArrayList實現(xiàn)Serializable,表示可以被序列化,通過序列化去傳輸,典型的應(yīng)用就是hessian協(xié)議。
Java List的常用操作
list中添加,獲取,刪除元素;
添加方法是:.add(e);
獲取方法是:.get(index);
刪除方法是:.remove(index);按照索引刪除;.remove(Object o);按照元素內(nèi)容刪除;
利用list中索引位置重新生成一個新的list(截取集合);
方法:.subList(fromIndex,toIndex);.size();該方法得到list中的元素數(shù)的和
去重復(fù);
list中根據(jù)索引將元素數(shù)值改變;
注意.set(index,element);和.add(index,element);的不同;
List的子類
1、linkedList類
linkedList實現(xiàn)了List接口,允許null元素。此外linkedList提供額外的get,remove,insert方法在linkedList的首部或尾部。這些操作使linkedList可被用作堆棧(stack),隊列(queue)或雙向隊列(deque)。
注意linkedList沒有同步方法。如果多個線程同時訪問一個List,則必須自己實現(xiàn)訪問同步。一種解決方法是在創(chuàng)建List時構(gòu)造一個同步的List:
2、ArrayList類
ArrayList實現(xiàn)了可變大小的數(shù)組。它允許所有元素,包括null。ArrayList沒有同步。
size,isEmpty,get,set方法運行時間為常數(shù)。但是add方法開銷為分?jǐn)偟某?shù),添加n個元素需要O(n)的時間。其他的方法運行時間為線性。
每個ArrayList實例都有一個容量(Capacity),即用于存儲元素的數(shù)組的大小。這個容量可隨著不斷添加新元素而自動增加,但是增長算法并沒有定義。當(dāng)需要插入大量元素時,在插入前可以調(diào)用ensureCapacity方法來增加ArrayList的容量以提高插入效率。
和linkedList一樣,ArrayList也是非同步的(unsynchronized)。
特點是:尋址容易,插入和刪除困難;
3、Vector類
Vector非常類似ArrayList,但是Vector是同步的。由Vector創(chuàng)建的Iterator,雖然和ArrayList創(chuàng)建的Iterator是同一接口,但是,因為Vector是同步的,當(dāng)一個Iterator被創(chuàng)建而且正在被使用,另一個線程改變了Vector的狀態(tài)(例如,添加或刪除了一些元素),這時調(diào)用Iterator的方法時將拋出ConcurrentModificationException,因此必須捕獲該異常。
4、Stack類
Stack繼承自Vector,實現(xiàn)一個后進(jìn)先出的堆棧。Stack提供5個額外的方法使得Vector得以被當(dāng)作堆棧使用?;镜膒ush和pop方法,還有peek方法得到棧頂?shù)脑?,empty方法測試堆棧是否為空,search方法檢測一個元素在堆棧中的位置。Stack剛創(chuàng)建后是空棧。
以上就是深圳達(dá)內(nèi)教育java培訓(xùn)機構(gòu)的小編針對“Java編程基礎(chǔ)中l(wèi)ist的用法”的內(nèi)容進(jìn)行的回答,希望對大家有所幫助,如有疑問,請在線咨詢,有專業(yè)老師隨時為你服務(wù)。