溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

java中的list和arraylist有什么區(qū)別

發(fā)布時(shí)間:2020-06-26 14:55:41 來(lái)源:億速云 閱讀:1654 作者:Leah 欄目:編程語(yǔ)言

今天就跟大家聊聊有關(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();
    }
}

java中的list和arraylist有什么區(qū)別

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();
    }
}

java中的list和arraylist有什么區(qū)別

父類(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è)資訊頻道,感謝大家的支持。

向AI問(wèn)一下細(xì)節(jié)

免責(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)容。

AI