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
java中ArrayList用法詳解,基本用法(含增刪改查)
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
Java中ArrayList類詳解
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.*包中,因此每次必須在開頭處引用該包。