區別:
List是一個接口,而ArrayList是List接口的實作類別。 ArrayList類別繼承並實作了List介面。
因此,List接口不能被構造,也就是我們說的不能創建實例對象,但是我們可以像下面那樣為List接口創建一個指向自己的對象引用,而ArrayList實現類的實例對象就在這充當了這個指向List介面的物件參考。
Animals.java public abstract class Animals { //动物名字 String name; //动物叫声 public void shout(){ System.out.println("叫声----"); } } Dog.java public class Dog extends Animals { //狗类独有的方法 public void guard(){ System.out.println("狗独有的看门本领"); } } 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();//是错误的用法
List list = new ArrayList();
這句話建立了一個ArrayList實作類別的物件後把它上溯到了List介面。此時它就是一個List物件了,它有些ArrayList類別具有的,但是List介面沒有的屬性和方法,它就不能再用了,而
ArrayList list=newArrayList();
創建一物件則保留了ArrayList的所有屬性和方法。
Test.java public class Test { public static void main(String[] args) throws ClassNotFoundException { Animals a2 = new Dog(); a2.shout(); a2.guard(); } }
父類別不能再呼叫父類別出現而子類別沒有出現的方法。否則會編譯出錯。
如果是下面這個樣子的:
List a=new ArrayList();
則a擁有List的所有屬性和方法,不會擁有其實作類別ArrayList的獨有的屬性和方法。
如果List與ArrayList中有相同的屬性(如int i),有相同的方法(如void f()),
則a.i是呼叫了List中的i,a.f ()是呼叫了ArrayList中的f();
問題的關鍵:
為什麼要用 List list = new ArrayList()
而不用 ArrayList alist = new ArrayList()
呢?
問題就在於List介面有多個實作類,現在你用的是ArrayList,也許哪一天你需要換成其它的實作類,如:
LinkedList或Vector等等,這時你只要改變這一行就行了: List list = new LinkedList();
其它使用了list地方的程式碼根本不需要改變。
假設你開始用ArrayList alist = new ArrayList()
, 這下你有的改了,特別是如果你使用了ArrayList實作類別特有的方法和屬性。
推薦教學:Java教學
以上是java中list與arraylist的差別的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

記事本++7.3.1
好用且免費的程式碼編輯器

WebStorm Mac版
好用的JavaScript開發工具

Dreamweaver Mac版
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)