2013-07-13 86 views
-1

使用數組列表和列表之間的區別是什麼?實際上,當我想用​​istself實例化List時,Java引發了一個異常,實際上我必須用ArrayList來實現。數組列表和列表之間的區別

+0

[什麼是列表與數組列表?](http://stackoverflow.com/questions/6867484/what-is-a-list-vs-an-arraylist)和[Java List vs ArrayList ](http://stackoverflow.com/questions/9309093/java-list-vs-arraylist)。 –

+0

當你用自己實例化列表時,你確定你正在得到一個異常而不是編譯時錯誤嗎? – bschandramohan

回答

0

列表是一個接口,的ArrayList是實現列表的類。你不能實例化一個接口。

+3

好吧,你幾乎可以實例化一個接口 - 與一個匿名類。 – Bohemian

+1

好點@Bohemian – morgano

+2

從技術上講,匿名類是*類*,但感覺就像是在實例化一個接口。 – Bohemian

0

列表是一種被稱爲接口的一般對象類型。有許多類型的列表,包括但不限於ArrayList和LinkedList。列表接口爲處理列表所需的一組方法提供句柄,而不必知道它是哪種類型的列表。任何類型的列表都可以分配給List類型的變量。但是列表本身不能被實例化,因爲它只是一個接口而不是一個實現。請參閱Java列表教程以獲取更多信息。 http://docs.oracle.com/javase/tutorial/collections/interfaces/list.html

1

List抽象類型 - 一個java interface。接口定義在實現List的對象上可找到的方法。

ArrayListList接口(它在內部使用數組來存儲元素,因此名稱)的具體實現。

一種ArrayListList,但List不是一定一個ArrayList。還有其他的實現,比如LinkedList

Liskov substitution principle

+0

我會偷利斯科夫替代原則xD – nachokk

+0

@nachokk其實,這是一個偉大的鏈接,只是拋出一個答案,給它百科全書,權威的感覺:) – Bohemian

0

你的代碼引發異常的原因List是抽象的,你不能實例化抽象的東西。

列表是一個接口。這裏您定義合同這種類型的行爲簽名。

ArrayList是一個列表,原因implements List,ArrayList是一個具體的實現所以然後讓所有的方法由List接口定義。

在Java中,你可以明顯實例製作anonymous classes一個接口,但你真的有一個實現與雜牌List合同的具體類(這就是爲什麼匿名名稱)。

下面是一個例子

List list = new List(){ 

      @Override 
      public boolean add(Object arg0) { 
       // TODO Auto-generated method stub 
       return false; 
      } 

      @Override 
      public void add(int arg0, Object arg1) { 
       // TODO Auto-generated method stub 

      } 

      @Override 
      public boolean addAll(Collection arg0) { 
       // TODO Auto-generated method stub 
       return false; 
      } 

      @Override 
      public boolean addAll(int arg0, Collection arg1) { 
       // TODO Auto-generated method stub 
       return false; 
      } 

      @Override 
      public void clear() { 
       // TODO Auto-generated method stub 

      } 

      @Override 
      public boolean contains(Object arg0) { 
       // TODO Auto-generated method stub 
       return false; 
      } 

      @Override 
      public boolean containsAll(Collection arg0) { 
       // TODO Auto-generated method stub 
       return false; 
      } 

      @Override 
      public Object get(int arg0) { 
       // TODO Auto-generated method stub 
       return null; 
      } 

      @Override 
      public int indexOf(Object arg0) { 
       // TODO Auto-generated method stub 
       return 0; 
      } 

      @Override 
      public boolean isEmpty() { 
       // TODO Auto-generated method stub 
       return false; 
      } 

      @Override 
      public Iterator iterator() { 
       // TODO Auto-generated method stub 
       return null; 
      } 

      @Override 
      public int lastIndexOf(Object arg0) { 
       // TODO Auto-generated method stub 
       return 0; 
      } 

      @Override 
      public ListIterator listIterator() { 
       // TODO Auto-generated method stub 
       return null; 
      } 

      @Override 
      public ListIterator listIterator(int arg0) { 
       // TODO Auto-generated method stub 
       return null; 
      } 

      @Override 
      public boolean remove(Object arg0) { 
       // TODO Auto-generated method stub 
       return false; 
      } 

      @Override 
      public Object remove(int arg0) { 
       // TODO Auto-generated method stub 
       return null; 
      } 

      @Override 
      public boolean removeAll(Collection arg0) { 
       // TODO Auto-generated method stub 
       return false; 
      } 

      @Override 
      public boolean retainAll(Collection arg0) { 
       // TODO Auto-generated method stub 
       return false; 
      } 

      @Override 
      public Object set(int arg0, Object arg1) { 
       // TODO Auto-generated method stub 
       return null; 
      } 

      @Override 
      public int size() { 
       // TODO Auto-generated method stub 
       return 0; 
      } 

      @Override 
      public List subList(int arg0, int arg1) { 
       // TODO Auto-generated method stub 
       return null; 
      } 

      @Override 
      public Object[] toArray() { 
       // TODO Auto-generated method stub 
       return null; 
      } 

      @Override 
      public Object[] toArray(Object[] arg0) { 
       // TODO Auto-generated method stub 
       return null; 
      } 

     }; 

由於@Bohemian說,如果你讓你自己的列表實現你要關心Liskov Substitution Principle,以不破此,並按照合同。

相關問題