您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關(guān)java中的list和arraylist有什么區(qū)別,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。
區(qū)別:
List是一個(gè)接口,而ArrayList是List接口的一個(gè)實(shí)現(xiàn)類(lèi)。ArrayList類(lèi)繼承并實(shí)現(xiàn)了List接口。
因此,List接口不能被構(gòu)造,也就是我們說(shuō)的不能創(chuàng)建實(shí)例對(duì)象,但是我們可以像下面那樣為L(zhǎng)ist接口創(chuàng)建一個(gè)指向自己的對(duì)象引用,而ArrayList實(shí)現(xiàn)類(lèi)的實(shí)例對(duì)象就在這充當(dāng)了這個(gè)指向List接口的對(duì)象引用。
Animals.java public abstract class Animals { //動(dòng)物名字 String name; //動(dòng)物叫聲 public void shout(){ System.out.println("叫聲----"); } } Dog.java public class Dog extends Animals { //狗類(lèi)獨(dú)有的方法 public void guard(){ System.out.println("狗獨(dú)有的看門(mén)本領(lǐng)"); } } Test.java public class Test { public static void main(String[] args) throws ClassNotFoundException { Animals a1 = new Animals(); Animals a2 = new Dog(); } }
List list;//正確,list = null; List list = new List();//是錯(cuò)誤的用法
List list = new ArrayList();
這句創(chuàng)建了一個(gè)ArrayList實(shí)現(xiàn)類(lèi)的對(duì)象后把它上溯到了List接口。此時(shí)它就是一個(gè)List對(duì)象了,它有些ArrayList類(lèi)具有的,但是List接口沒(méi)有的屬性和方法,它就不能再用了,而
ArrayList list=newArrayList();
創(chuàng)建一對(duì)象則保留了ArrayList的所有屬性和方法。
Test.java public class Test { public static void main(String[] args) throws ClassNotFoundException { Animals a2 = new Dog(); a2.shout(); a2.guard(); } }
父類(lèi)不能再調(diào)用父類(lèi)出現(xiàn)而子類(lèi)沒(méi)有出現(xiàn)的方法。否則會(huì)編譯出錯(cuò)。
如果是下面這個(gè)樣子的:
List a=new ArrayList();
則a擁有List的所有屬性和方法,不會(huì)擁有其實(shí)現(xiàn)類(lèi)ArrayList的獨(dú)有的屬性和方法。
如果List與ArrayList中有相同的屬性(如int i),有相同的方法(如void f()),
則a.i是調(diào)用了List中的i,a.f()是調(diào)用了ArrayList中的f();
問(wèn)題的關(guān)鍵:
為什么要用 List list = new ArrayList()
而不用 ArrayList alist = new ArrayList()
呢?
問(wèn)題就在于List接口有多個(gè)實(shí)現(xiàn)類(lèi),現(xiàn)在你用的是ArrayList,也許哪一天你需要換成其它的實(shí)現(xiàn)類(lèi),如:
LinkedList或者Vector等等,這時(shí)你只要改變這一行就行了: List list = new LinkedList();
其它使用了list地方的代碼根本不需要改動(dòng)。
假設(shè)你開(kāi)始用ArrayList alist = new ArrayList()
, 這下你有的改了,特別是如果你使用了ArrayList實(shí)現(xiàn)類(lèi)特有的方法和屬性。
看完上述內(nèi)容,你們對(duì)java中的list和arraylist的區(qū)別有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注億速云行業(yè)資訊頻道,感謝大家的支持。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。