Java中的List接口實(shí)現(xiàn)類(lèi)解析
Java的List接口實(shí)現(xiàn)類(lèi)
實(shí)現(xiàn)類(lèi)ArrayList
ArrayList類(lèi)相當(dāng)于一個(gè)容量可變的動(dòng)態(tài)數(shù)組,當(dāng)超過(guò)了他的大小時(shí),類(lèi)集自動(dòng)增加,當(dāng)對(duì)象被刪除后,數(shù)組就可以縮小。
import java.util.*; public class ListDemo { public static void main(String args[]){ Collection c1 = new ArrayList();//實(shí)例化一個(gè)具體的子類(lèi)對(duì)象 for(int i=0;i<5;i++){ c1.add(new Integer(i)); }//循環(huán)添加5個(gè)整型類(lèi)對(duì)象 System.out.println("c1:"+c1); Collection c2 = new ArrayList(); c2.addAll(c1); c2.remove(new Integer(3)); c2.add("hehe"); System.out.println("c2:"+c2); Iterator it = c2.iterator(); while(it.hasNext()){ Object obj = it.next(); System.out.println("Iterator遍歷c2 "+obj+"\t"); } } }
運(yùn)行結(jié)果:
c1:[0, 1, 2, 3, 4]
c2:[0, 1, 2, 4, hehe]
Iterator遍歷c2 0
Iterator遍歷c2 1
Iterator遍歷c2 2
Iterator遍歷c2 4
Iterator遍歷c2 hehe
注:
Collection的打印結(jié)果以方括號(hào)括住,每個(gè)元素之間以逗號(hào)相隔。由ArrayList的結(jié)構(gòu)特點(diǎn)可知,該類(lèi)取出元素有較高的效率,但元素做刪除或插入操作較慢。
實(shí)現(xiàn)類(lèi)LinkedList
import java.util.LinkedList; public class LinkedListDemo { public static void main(String args[]) { LinkedList linkedList = new LinkedList(); linkedList.add("F"); linkedList.add("B"); linkedList.add("D"); linkedList.add("E"); linkedList.add("C"); System.out.println("顯示初始化后linklist的內(nèi)容:" + linkedList); linkedList.addLast("Z"); linkedList.addFirst("AO"); linkedList.add(1, "AI"); System.out.println("顯示添加操作后linkedList內(nèi)容:" + linkedList); linkedList.remove("F"); linkedList.remove(2); System.out.println("顯示刪除操作后的linkedList內(nèi)容:" + linkedList); linkedList.removeFirst(); linkedList.removeLast(); System.out.println("顯示刪除操作后linkList內(nèi)容:" + linkedList); Object object = linkedList.get(2); //修改內(nèi)容 linkedList.set(2, (String) object + "Chaanged"); System.out.println("現(xiàn)實(shí)操作后linklist內(nèi)容:" + linkedList); } }
運(yùn)行結(jié)果:
顯示初始化后linklist的內(nèi)容:[F, B, D, E, C]
顯示添加操作后linkedList內(nèi)容:[AO, AI, F, B, D, E, C, Z]
顯示刪除操作后的linkedList內(nèi)容:[AO, AI, D, E, C, Z]
顯示刪除操作后linkList內(nèi)容:[AI, D, E, C]
現(xiàn)實(shí)操作后linklist內(nèi)容:[AI, D, EChaanged, C]Process finished with exit code 0
注:
LinkedList容器類(lèi)提供了一個(gè)鏈接列表數(shù)據(jù)結(jié)構(gòu),通過(guò)連接指針來(lái)關(guān)聯(lián)前后兩個(gè)元素。因?yàn)長(zhǎng)inkedList是使用雙向鏈表實(shí)現(xiàn)的容器,所以針對(duì)頻繁的插入或刪除元素,它適合實(shí)現(xiàn)棧和隊(duì)列。
實(shí)現(xiàn)類(lèi)Vector
Vector類(lèi)提供了實(shí)現(xiàn)了可增長(zhǎng)數(shù)組的功能,隨著更多元素加入其中,數(shù)組變得更大,在刪除一些元素之后,數(shù)組變小。Vector類(lèi)的大多數(shù)操作和ArrayList類(lèi)相同,區(qū)別之處在于Vector類(lèi)是線程同步的。
import java.util.Vector; public class VectorDemo { public static void main(String args[]){ Vector v = new Vector(); v.add("one"); v.add("two"); v.add("three"); System.out.println("顯示向量初始值:"+v.toString()); v.insertElementAt("zero",0); v.insertElementAt("oop",3); System.out.println("顯示插入后向量值:"+v.toString()); v.setElementAt("three",3); v.setElementAt("four",4); System.out.println("顯示修改后元素向量值:"+v.toString()); v.removeAllElements(); System.out.println("顯示全刪除后向量值:"+v.toString()); } }
運(yùn)行結(jié)果:
顯示向量初始值:[one, two, three]
顯示插入后向量值:[zero, one, two, oop, three]
顯示修改后元素向量值:[zero, one, two, three, four]
顯示全刪除后向量值:[]Process finished with exit code 0
注解:
Java的集合與數(shù)組的區(qū)別在于,在創(chuàng)建Java數(shù)組時(shí),必須明確指定數(shù)組的長(zhǎng)度,數(shù)組一旦創(chuàng)建,其長(zhǎng)度就不能被改變。為了使程序能方便的存儲(chǔ),檢索和操縱數(shù)目不固定的一組數(shù)組,JDK類(lèi)庫(kù)創(chuàng)建了Java集合,所有Java集合類(lèi)都位于java.util包中。另外Java集合中不能存放基本類(lèi)型數(shù)據(jù),而只能存放對(duì)象的引用。
List三個(gè)實(shí)現(xiàn)類(lèi)
List 是有序的 Collection。
List 一共三個(gè)實(shí)現(xiàn)類(lèi)分別是 ArrayList、Vector 和 LinkedList。
ArryList
底層通過(guò)數(shù)組實(shí)現(xiàn),允許對(duì)元素進(jìn)行快速隨機(jī)訪問(wèn),數(shù)組的缺點(diǎn)是元素之間不能有間隔。當(dāng)數(shù)組大小不滿(mǎn)足時(shí),需要增加存儲(chǔ)能力,即將已有數(shù)組的數(shù)據(jù)復(fù)制到新的存儲(chǔ)空間。插入和刪除的代價(jià)較高,適合于隨機(jī)查找和遍歷。線程是不安全的。排列有序,數(shù)據(jù)可重復(fù)Vector
底層通過(guò)數(shù)組實(shí)現(xiàn),支持線程的同步,即某一時(shí)刻只有一個(gè)線程能夠?qū)慥ector,但實(shí)現(xiàn)同步的代價(jià)很高,訪問(wèn)速度比ArryList慢,線程安全但效率低。排列有序,數(shù)據(jù)可重復(fù)LinkList
底層用鏈表實(shí)現(xiàn)適于數(shù)據(jù)的動(dòng)態(tài)插入和刪除,但隨即訪問(wèn)和遍歷的速度慢。排列有序,但數(shù)據(jù)不可重復(fù)。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Log4j詳細(xì)使用教程_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要為大家詳細(xì)介紹了Log4j的使用教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-08-08SpringMvc+Angularjs 實(shí)現(xiàn)多文件批量上傳
本文通過(guò)實(shí)例代碼給大家講解了SpringMvc+Angularjs 實(shí)現(xiàn)多文件批量上傳功能,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友一起學(xué)習(xí)吧2017-03-03基于RxPaparazzo實(shí)現(xiàn)圖片裁剪、圖片旋轉(zhuǎn)、比例放大縮小功能
這篇文章主要為大家詳細(xì)介紹了基于RxPaparazzo實(shí)現(xiàn)圖片裁剪、圖片旋轉(zhuǎn)、比例放大縮小功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-05-05springboot如何實(shí)現(xiàn)異步響應(yīng)請(qǐng)求(前端請(qǐng)求超時(shí)的問(wèn)題解決)
這篇文章主要給大家介紹了關(guān)于springboot如何實(shí)現(xiàn)異步響應(yīng)請(qǐng)求(前端請(qǐng)求超時(shí)的問(wèn)題解決)的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用springboot具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2023-01-01Java計(jì)時(shí)器StopWatch實(shí)現(xiàn)方法代碼實(shí)例
這篇文章主要介紹了Java計(jì)時(shí)器StopWatch實(shí)現(xiàn)方法代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-07-07SpringBoot高版本修改為低版本時(shí)測(cè)試類(lèi)報(bào)錯(cuò)的解決方案
這篇文章主要介紹了SpringBoot高版本修改為低版本時(shí)測(cè)試類(lèi)報(bào)錯(cuò)的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-09-09SpringBoot+JavaMailSender實(shí)現(xiàn)騰訊企業(yè)郵箱配置
這篇文章主要介紹了SpringBoot+JavaMailSender實(shí)現(xiàn)騰訊企業(yè)郵箱配置,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04項(xiàng)目打包成jar后包無(wú)法讀取src/main/resources下文件的解決
本文主要介紹了項(xiàng)目打包成jar后包無(wú)法讀取src/main/resources下文件的解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-04-04