1. 程式人生 > >Java List ArrayList用法詳解

Java 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的用法
List包括List介面以及List介面的所有實現類。因為List介面實現了Collection介面,所以List介面擁有Collection介面提供的所有常用方法,又因為List是列表型別,所以List介面還提供了一些適合於自身的常用方法,如表1所示。

表1  List介面定義的常用方法及功能
從表1可以看出,List介面提供的適合於自身的常用方法均與索引有關,這是因為List集合為列表型別,以線性方式儲存物件,可以通過物件的索引操作物件。
List介面的常用實現類有ArrayList和LinkedList,在使用List集合時,通常情況下宣告為List型別,例項化時根據實際情況的需要,例項化為ArrayList或LinkedList,例如:
List<String> l = new ArrayList<String>();// 利用ArrayList類例項化List集合
List<String> l2 = new LinkedList<String>();// 利用LinkedList類例項化List集合
1.add(int index, Object obj)方法和set(int index, Object obj)方法的區別
在使用List集合時需要注意區分add(int index, Object obj)方法和set(int index, Object obj)方法,前者是向指定索引位置新增物件,而後者是修改指定索引位置的物件,例如執行下面的程式碼:
srccommwqTestCollection.java關鍵程式碼:

public static void main(String[] args) {
String a = "A", b = "B", c = "C", d = "D", e = "E";
List<String> list = new LinkedList<String>();
list.add(a);
list.add(e);
list.add(d);
list.set(1, b);// 將索引位置為1的物件e修改為物件b
list.add(2, c);// 將物件c新增到索引位置為2的位置
Iterator<String> it = list.iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
}
在控制檯將輸出如下資訊:
A
B
C
D
因為List集合可以通過索引位置訪問物件,所以還可以通過for迴圈遍歷List集合,例如遍歷上面程式碼中的List集合的程式碼如下:
srccommwqTestCollection.java關鍵程式碼:
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));// 利用get(int index)方法獲得指定索引位置的物件
}
srccommwqTestCollection.java完整程式碼如下:
package com.mwq;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Iterator;
import java.util.List;
public class TestCollection {
public static void main(String[] args) {
System.out.println("開始:");
String a = "A", b = "B", c = "C", d = "D", e = "E";
List<String> list = new LinkedList<String>();
list.add(a);
list.add(e);
list.add(d);
list.set(1, b);// 將索引位置為1的物件e修改為物件b
list.add(2, c);// 將物件c新增到索引位置為2的位置
Iterator<String> it = list.iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
//                 for (int i = 0; i < list.size(); i++) {
//                       System.out.println(list.get(i));// 利用get(int index)方法獲得指定索引位置的物件
//          }
System.out.println("結束!");
}
}

編譯一下就知道結果了。

如果這個樣子: 
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特有的方法和屬性。


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

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

如果開發的時候覺得ArrayList,HashMap的效能不能滿足你的需要,可以通過實現List,Map(或者Collection)來定製你的自定義類



相關推薦

Java List ArrayList用法

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

javaArrayList用法,基本用法(含增刪改查)

1、什麼是ArrayList ArrayList就是動態陣列,它提供了①動態的增加和減少元素 ②實現了ICollection和IList介面 ③靈活的設定陣列的大小ArrayList是一個其容量能夠動態增長的動態陣列。它繼承了AbstractList,實現了List、Rand

Java enum的用法

num 所有 out 解決辦法 inter cli 語句 tel 白色 用法一:常量 在JDK1.5 之前,我們定義常量都是: public static fianl.... 。現在好了,有了枚舉,可以把相關的常量分組到一個枚舉類型裏,而且枚舉提供了比常量更多的方法。

Java中SimpleDateFormat用法

轉自:http://blog.csdn.net/linbooooo1987/article/details/7540999 [java]  view plain  copy

PACKAGE-INFO.JAVA 作用及用法

package-info.java對於經常使用外部包的程式設計師來說應該是熟悉陌生人。因為不是專門開發包的程式設計師很少需要關注它,而又常在其他包中看到他,眼很熟。它到底有哪些特性和作用及如何使用呢?程式設計師講究動口不如動手,何不建立一個試試。開啟Eclipse,new class,哦!建立失敗,‘-’

Java反射的用法

      Java反射作為其動態語言的標誌性特點之一我們很有必要掌握,至少得知道其基本用法~ ~本文嘗試著從構造器、屬性、方法這三點進行講解反射的用法。在開始之前我先準備好了一個Person類,此類包含了有參構造器、無參構造器、私有屬性、公開屬性、以及私有方法和公開方法。

轉載自rhino的Java enum的用法

用法一:常量 在JDK1.5 之前,我們定義常量都是: public static fianl.... 。現在好了,有了列舉,可以把相關的常量分組到一個列舉型別裡,而且列舉提供了比常量更多的方法。 public enum Color { RED, GREEN, BLANK, YELLOW }

Python list.pop() | list.remove() 用法

一、list.pop(index) 用於從列表中刪除元素,該語句還能返回被刪除的元素。 注意:index表示該元素的下標。 a = [0,1,2,3,4,5] print a.pop() # 輸出5

JavaArrayList

1、什麼是ArrayList  ArrayList就是傳說中的動態陣列,用MSDN中的說法,就是Array的複雜版本,它提供瞭如下一些好處:  動態的增加和減少元素  實現了ICollection和IList介面  靈活的設定陣列的大小 2、如何使用ArrayList

java中synchronized用法

synchronized Java語言的關鍵字,當它用來修飾一個方法或者一個程式碼塊的時候,能夠保證在同一時刻最多隻有一個執行緒執行該段程式碼。 第一篇:      一、當兩個併發執行緒訪問同一個物件object中的這個synchronized(this)同步程式碼

JAVA常用集合框架用法基礎篇二之Colletion子介面List

接著上一篇,接著講講集合的知識。上一篇講了Collection介面。它可以說是集合的祖先了,我們這一篇就說說它的子孫們。 一、Collection的子介面 List:有序(存入和取出的順序一致),元素都有索引(即角標),元素可以重複。 Set:元素不能重複,無序的。 首先講講L

java中的instanceof用法

定義 xtend print 繼承 interface 參數 保留 如果 ack   instanceof是Java的一個二元操作符(運算符),也是Java的保留關鍵字。它的作用是判斷其左邊對象是否為其右邊類的實例,返回的是boolean類型的數據。用它來判斷某個對象是否是

java中靜態代碼塊的用法—— static用法

super關鍵字 了解 裝載 static關鍵字 super 屬於 註意 lock 自動 (一)java 靜態代碼塊 靜態方法區別一般情況下,如果有些代碼必須在項目啟動的時候就執行的時候,需要使用靜態代碼塊,這種代碼是主動執行的;需要在項目啟動的時候就初始化,在不創建對象的

C# List<T>用法

知新樹 寧金峰 所屬命名空間:System.Collections.Generic public class List<T> : IList<T>, ICollection<T>, IEnumerable<T>, IList, ICollection, IEnu

JAVA的Random類的用法

Random類 (java.util)         Random類中實現的隨機演算法是偽隨機,也就是有規則的隨機。在進行隨機時,隨機演算法的起源數字稱為種子數(seed),在種子數的基礎上進行一定的變換,從而產生

JAVA常用集合框架用法基礎篇一之Colletion介面

首先,在學習集合之前我們能夠使用的可以儲存多個元素的容器就是陣列。 下面舉幾個例子主要是引出集合類的: 1、8,4,5,6,7,55,7,8  像這樣的型別相同的可以使用陣列來儲存,本例可以用int[] arr來儲存。 2、”zhnagsan”,true,68 像這樣的可以使

JAVA常用集合框架用法基礎篇三之Colletion子介面Set

這一篇我們來介紹Collection介面的另一個子介面,Set介面。Set是個介面,元素不可以重複,是無序的。Set介面中的方法和Collection的一致。 A、Set的子類: 1、HashSet:此類實現的Set介面,由雜湊表(實際上是一個HashMap)例項支援,它不保證Set的迭代順

Java 列舉(enum)型別 常見7種用法

JDK1.5引入了新的型別——列舉。在 Java 中它雖然算個“小”功能,卻給我的開發帶來了“大”方便。 用法一:常量 在JDK1.5 之前,我們定義常量都是: public static final.... 。現在好了,有了列舉,可以把相關

java中的值傳遞和引用傳遞用法

       值傳遞:方法呼叫時,實際引數把它的值傳遞給對應的形式引數,方法執行中形式引數值的改變不影響實際參 數的值。   引用傳遞:也稱為傳地址。方法呼叫時,實際引數的引用(地址,而不是引數的值)被傳遞給方法中相對應的形式引數,在方法執行中,對形式引數的操作實際上就是對實際引數的

JAVA高精度演算法 BigInteger用法 大數四則運算

在用C或者C++處理大數時感覺非常麻煩,但是在Java中有兩個類BigInteger和BigDecimal分別表示大整數類和大浮點數類,至於兩個類的物件能表示最大範圍不清楚,理論上能夠表示無線大的數,只要計算機記憶體足夠大。 這兩個類都在java.math.*包中,因此每次必須在開頭處引用該包。