【Java類集】_List介面筆記
本章目標:
掌握List介面與Collection介面的關係
掌握List介面的常用子類:ArrayList、Vector
掌握ArrayList與Vector類的區別
3.具體內容
List是Collection的子介面,List介面可以存放任意資料,而且List介面的內容是允許重複的。
List介面的功能要比Collection介面強大很多,因為大量的擴充了Collection介面的操作。
List介面擴充的方法:
No. 方法 類型 描述
1 public void add(int index,E element) 普通 在指定位置增加元素
2 public boolean addAll(int index,Collection<? extends E?> c) 普通 在指定位置增加一組元素
3 E get(int index) 普通 返回指定位置的元素
4 public int indexOf(Object o) 普通 尋找指定元素的位置
5 public int lastIndexOf(Object o) 普通 從後向前尋找指定元素的位置
6 public ListIterator<E> listIterator() 普通 為ListIterator介面執行個體化
7 public E remove(in index) 普通 按指定的位置刪除元素
8 public List<E> subList(int fromIndex,int toIndex) 普通 取出集合中的子集合
9 public E set(int index,E element) 普通 替換指定位置的元素
List介面的常用子類——ArrayList
ArrayList是List子類,可以直接通過對象的多態性,為List介面執行個體化
此類的定義如下:
public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, CloneAble, Serializable
AbstractList類的定義如下:
public abstract class AbstractList<E> extends AbstractCollection<E> implements List<E>
如果想要使用介面,則肯定要使用對象的多態性進行執行個體化的操作,那麼對於List介面本身也是一樣的 。
ArrayList的是List中最常用的子類。
import java.util.ArrayList;import java.util.List;public class ArrayListDemo01{ public static void main(String args[]){ List<String> allList = null; allList = new ArrayList<String>(); allList.add("Hello"); allList.add("World"); System.out.println(allList); }}
輸出:[Hello, World]
指定位置添加,添加的方法是List介面擴充的方法。
import java.util.ArrayList;import java.util.List;import java.util.Collection;public class ArrayListDemo01{ public static void main(String[] args){ List<String> allList = null; Collection<String> allCollection = null; allList = new ArrayList<String>(); allCollection = new ArrayList<String>(); allList.add("Hello"); allList.add(0,"World"); System.out.println(allList); allCollection.add("LXH"); allCollection.add("www.mldn.cn"); allList.addAll(allCollection); System.out.println(allList); }}
輸出:
[World, Hello]
[World, Hello, LXH, www.mldn.cn]
在指定位置上加入一組資料
import java.util.ArrayList;import java.util.List;import java.util.Collection;public class ArrayListDemo01{ public static void main(String[] args){ List<String> allList = null; Collection<String> allCollection = null; allList = new ArrayList<String>(); allCollection = new ArrayList<String>(); allList.add("Hello"); allList.add(0,"World"); System.out.println(allList); allCollection.add("LXH"); allCollection.add("www.mldn.cn"); allList.addAll(allCollection); allList.addAll(0,allCollection); System.out.println(allList); }}
輸出:
[World, Hello]
[LXH, www.mldn.cn, World, Hello, LXH, www.mldn.cn]
既然可以增加資料,那麼就可以刪除資料
List中存在兩種刪除:根據對象內容、根據對象的編號
import java.util.ArrayList;import java.util.List;public class ArrayListDemo02{ public static void main(String args[]){ List<String> allList = null; allList = new ArrayList<String>(); allList.add("Hello"); allList.add(0,"World"); allList.add("MLDN"); allList.add("www.mldn.cn"); allList.remove(0); allList.remove("MLDN"); System.out.println(allList); }}
輸出:
[Hello, www.mldn.cn]
集合中的內容可以添加,可以刪除,那麼實際上最重要的就是輸出。
在List介面中提供了get()方法,利用此方法就可以完成輸出。
通過迴圈完成輸出,迴圈的次數由size()方法取得。
import java.util.ArrayList;import java.util.List;public class ArrayListDemo03{ public static void main(String[] args){ List<String> allList = null; allList = new ArrayList<String>(); allList.add("Hello"); allList.add("World"); allList.add(0,"Hello"); allList.add("MLDN"); System.out.println("由前向後輸出"); for(int i=0;i<allList.size();i++){ System.out.print(allList.get(i)); } System.out.println("\n由後向前輸出"); for(int i=allList.size()-1;i>=0;i--){ System.out.print(allList.get(i)); } }}
輸出:
由前向後輸出
HelloHelloWorldMLDN
由後向前輸出
MLDNWorldHelloHello
此輸出方式是List介面所專屬的,而其它介面是沒有的,尤其是Collection中是沒有根據索引取出內容的操作。
import java.util.ArrayList;import java.util.List;public class ArrayListDemo04{ public static void main(String args[]){ List<String> allList = null; allList = new ArrayList<String>(); allList.add("Hello"); allList.add("World!"); allList.add("MLDN"); String str[] = allList.toArray(new String[]{}); //指定好類型 System.out.println("預先指定好資料類型"); for(int i=0;i<allList.size();i++){ System.out.print(allList.get(i)); } System.out.println("\n返回對象數群組類型"); Object obj[] = allList.toArray(); for(int i=0;i<allList.size();i++){ System.out.print((String)allList.get(i));//向下轉型操作 } }}
輸出:
預先指定好資料類型
HelloWorld!MLDN
返回對象數群組類型
HelloWorld!MLDN
既然已經完成基本的輸出的功能,集合中還有以下幾個操作:
判斷集合是否為空白:boolean isEmpty()
截取部分集合:List<E> subList(int fromIndex,int toIndex),List介面擴充
尋找指定對象是否存在:int indexOf(Object o),如果尋找到則返回位置,否則返回-1
尋找是否存在:boolean contains(Object o)
import java.util.ArrayList;import java.util.List;public class ArrayListDemo05{ public static void main(String args[]){ List<String> allList = null; allList = new ArrayList<String>(); System.out.println("集合操作之前先判斷集合是否為空白?"+allList.isEmpty()); allList.add("Hello"); allList.add("World"); allList.add("MLDN"); allList.add("www.mldn.cn"); System.out.println(allList.contains("Hello")?"\"Hello\"字串存在!":"\"Hello\"字串不存在!"); List<String> allSub = allList.subList(2,3); //字串截取 System.out.println("集合截取:"); for(int i=0;i<allSub.size();i++){ System.out.println(allSub.get(i)+"、"); } System.out.println("MLDN字串的位置:"+allList.indexOf("MLDN")); System.out.println("集合操作之後集合是否為空白?"+allList.isEmpty()); } }
輸出:
集合操作之前先判斷集合是否為空白?true
"Hello"字串存在!
集合截取:
MLDN、
MLDN字串的位置:2
集合操作之後集合是否為空白?false
以上的操作都是使用ArrayList子類完成的。
挽救的子類Vector
考慮到大部分的人已經習慣了使用Vector類,所以JAVA的設計者,就讓Vector類多實現了一個List介面,這才將其儲存下來。但是因為其是List子類,所以Vector類的使用之ArrayList沒有太大區別
Vector定義格式:
public class Vector<E> extends AbstratList<E> implements List<E>, RanddomAccess,Cloneable,Serializable
但是,雖然Vector類是舊的類,但是因為讓其實現了List的介面,所以對於程式來講是一樣的。
import java.util.Vector;import java.util.List;public class VectorListDemo01{ public static void main(String args[]){ List<String> allList = null; allList = new ArrayList<String>(); allList.add("Hello"); allList.add("World"); for(int i=0;i<allSub.size();i++){ System.out.println(allSub.get(i)+"、"); } }}
輸出:
Hello、
World、
在此類中也提供了重複的方法:
public void addElement(E obj)此方法與add()方法是一致的。
import java.util.Vector;import java.util.List;public class VectorListDemo02{ public static void main(String args[]){ Vector<String> allList = null; allList = new Vector<String>(); allList.addElement("Hello"); allList.addElement("World"); for(int i=0;i<allList.size();i++){ System.out.println(allList.get(i)+"、"); } }}
子類的差異:ArrayList與VectorList的區別
No. 比較點 ArrayList VectorList
1 推出時間 JDK1.2之後推出的,屬於新的操作類 JDK1.0時推出的,屬於舊的操作類
2 效能 採用非同步處理方式,效能更高 採用同步處理方式,效能較低
3 安全執行緒 屬於非安全執行緒操作類 屬於安全執行緒操作類
4 輸出 只能使用Iterator、 foreach輸出 可以使用Iterator、foreach、Enumeration輸出