1. 程式人生 > >List和ArrayList的區別

List和ArrayList的區別

List是一個介面,而ListArray是一個類。 
ListArray繼承並實現了List。 
所以List不能被構造,但可以向上面那樣為List建立一個引用,而ListArray就可以被構造。 
List list;     //正確   list=null; 
List list=new List();    //   是錯誤的用法

List list = new ArrayList();這句建立了一個ArrayList的物件後把上溯到了List。此時它是一個List物件了,有些ArrayList有但是List沒有的屬性和方法,它就不能再用了。 
而ArrayList list=new ArrayList();建立一物件則保留了ArrayList的所有屬性。 
這是一個例子: 
import java.util.*;

public class TestList{ 
public static void main(String[] args){ 
List list = new ArrayList(); 
ArrayList arrayList = new ArrayList();

list.trimToSize(); //錯誤,沒有該方法。
arrayList.trimToSize();   //ArrayList裡有該方法。

}

編譯一下就知道結果了。

如果這個樣子: 
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()呢?

如果直接宣告為ArrayList<String> list=new ArrayList<String>()這個也沒有問題。
而宣告成:List<String> list=new ArrayList<String>();這樣的形式使得list這個物件可以有多種的存在形式,比如要用連結串列存資料的話直接用LinkedList,使用ArrayList或者Vector直接通過list去=就可以了,這樣讓list這個物件活起來了,


再比如你需要換成其它的實現類,如 LinkedList或者Vector等等,這時你只要改變這一行就行了: 
List list = new LinkedList(); 其它使用了list地方的程式碼根本不需要改動。 
假設你開始用 ArrayList alist = new ArrayList(), 這下你有的改了,特別是如果你使用了 ArrayList特有的方法和屬性。


地區用 List arr = new ArrayList();定義;行業用 ArrayListarr = new ArrayList();定義;則說明,行業裡用到了ArrayList的特殊的方法.

另外的例子就是,在類的方法中,如下宣告:
private void doMyAction(List list){}
這樣這個方法能處理所有實現了List介面的類,一定程度上實現了泛型函式.

如果開發的時候覺得ArrayList,HashMap的效能不能滿足你的需要,可以通過實現List,Map(或者Collection)來定製你的自定義類.很多需求只能用一個list,記憶體有限,或者執行緒同步,不能有更多的集合物件,使得List總的介面來管理物件。

相關推薦

JAVA中 ListArrayList區別

屬性和方法 vector 實現類 多個 一個 什麽 性能 {} 等等 List是一個接口,而ListArray是一個類。 ListArray繼承並實現了List。 所以List不能被構造,但可以向上面那樣為List創建一個引用,而ListArray就可以被構造。 Li

ListArrayList, MapHashMap的區別

List是介面,List特性就是有序,會確保以一定的順序儲存元素. ArrayList是它的實現類,是一個用陣列實現的List. Map是介面,Map特性就是根據一個物件查詢物件. HashMap是它的實現類,HashMap用hash表實現的Map,就是利用物件的hashcode(hashcod

Java中ListArrayList區別(加入了個人見解)

       轉載自:http://www.cnblogs.com/aisiteru/articles/1151874.html       第一次看這篇文章時,是在CSDN部落格中看到的,作者寫的初衷還是蠻好的,但是確實有錯誤的地方和不是很明白的地方。於是就很想去看看原文,

List ArrayList區別

關於List和ArrayList、List<String> list = new ArrayList<String>();   List是一個介面,是Collection介面的一個子介面,是一個有序的集合。 ArrayList是List的一個實現類,

ListArrayList區別

List是一個介面,而ListArray是一個類。 ListArray繼承並實現了List。 所以List不能被構造,但可以向上面那樣為List建立一個引用,而ListArray就可以被構造。 List list;     //正確   list=null; List list=new List();   

陣列、ListArrayList區別

  有些知識點可能平時一直在使用,不過實際開發中我們可能只是知其然不知其所以然,所以經常的總結會對我們的提高和進步有很大的幫助,這裡記錄自己在工作之餘的問題,持續更新,歡迎高手斧正.   陣列、List和ArrayList的區別 陣列在記憶體中是連續儲存的,所以它的索引速度是非常的快,而且賦值與修改元素也

Java中ListArrayList區別

List是一個介面,而ListArray是一個類。  ListArray繼承並實現了List。  所以List不能被構造,但可以向上面那樣為List建立一個引用,而ListArray就可以被構造。  List list;     //正確   list=null;  Lis

List ArrayList區別

difference betwee List and ArrayList:List: 兼有陣列和ArrayList的功能;   給定資料型別,可以新增以及刪除插入; 不用裝箱拆箱:給定明確的資料型別;擁有arraylist 和陣列的功能 List<string>

Array、ListArrayList區別

Array 定義:  public abstract class Array:ICloneable, IList, ICollection, IEnumerable, IStructuralComparable, IStructuraEquatable     陣列在

C#陣列、ListArrayList區別

 有些知識點可能平時一直在使用,不過實際開發中我們可能只是知其然不知其所以然,所以經常的總結會對我們的提高和進步有很大的幫助,這裡記錄自己在工作之餘的問題,持續更新,歡迎高手斧正. 【陣列】  陣列在記憶體中是連續儲存的,所以它的索引速度是非常的快,而且賦值與修改元素也很簡

2.請介紹一下ListArrayList區別ArrayListHashSet區別

引用 equal ash arraylist 無序 lis 檢索 重復 lec 第一問:   List是接口,ArrayList實現了List接口。 第二問:   ArrayList實現了List接口,HashSet實現了Set接口,List和Set都是繼承Colle

hibernate中hql語句中listiterate區別

每次 hibernate 寫入 所有 讀取 條件 iter 查詢 hql 1.使用list()方法獲取查詢結果,每次發出一條語句,獲取全部數據。2.使用iterate()方法獲取查詢結果,先發出一條SQL語句用來查詢滿足條件數據的id,然後依次按照這些id查詢記錄,也就是要

LinkedListArrayList區別

else array RR for 數組下標 遍歷 如果 ring arraylist  查詢 LinkedList查詢用的遍歷,AyyayList查詢用的是數組下標,所以對於查詢ArrayList性能高於LinkedList 新增 新增在末尾或者中

listdic區別

注意:dict內部存放的順序和key放入的順序是沒有關係的。 和list比較,dict有以下幾個特點: 查詢和插入的速度極快,不會隨著key的增加而變慢; 需要佔用大量的記憶體,記憶體浪費多。 而list相反: 查詢和插入的時間隨著元素的增加而增加; 佔用空間小,浪費

VectorArrayList區別以及Vector並非是絕對執行緒安全的

首先看這兩類都實現List介面,而List介面一共有三個實現類,分別是ArrayList、Vector和LinkedList。List用於存放多個元素,能夠維護元素的次序,並且允許元素的重複。3個具體實現類的相關區別如下:ArrayList是最常用的List實現類,內部是通過

vectorarraylist區別

有三點需要注意: 第一: 當Vector元素超過他的初始大小時,Vector會將它的容積翻倍,而Arraylist只會增加百分之五十左右,這樣arraylist就有利於節約空間。 第二:這兩個類都是實現了list介面,都屬於有序集合,有序集合,顧名思義嗎,就是儲存在這兩個集合中的元

比較ListArrayList的效能及ArrayListLinkedList優缺點

List和ArrayList的效能比較 在使用ArrayList這樣的非泛型集合的過程中,要進行裝箱和拆箱操作,會有比較大的效能損失,而使用泛型集合就沒有這樣的問題。List是泛型,而ArrayList是非泛型。存資料島ArrayList都需要專程object,讀取又要轉換成相應的資料型別,List則不需要。

集合中LIstArrayList以及Hash一些知識點總結

建一個原陣列的拷貝,並修改原陣列,指向這個新建陣列。原陣列自動拋棄(<a href="https://www.baidu.com/s?wd=java%E5%9E%83%E5%9C%BE%E5%9B%9E%E6%94%B6&tn=44039180_cpr&fenlei=mv6quA

python listtuple區別

#只建立一個tuple 需要加,消除歧義 a_tuple=(2,) #在tuple中建立list mixed_tuple=(1,2,['a','b']) print("mixed_tuple"+str

C#中數組、ArrayListList三者的區別

collect comm 兩個 根據 -s lis 數據打包 功能 target 在C#中數組,ArrayList,List都能夠存儲一組對象,那麽這三者到底有什麽樣的區別呢。 數組 數組在C#中最早出現的。在內存中是連續存儲的,所以它的索引速度非常快,而且賦值