List介面及其主要實現類

Enjoy_process發表於2018-10-13

List介面繼承和擴充套件了Collection介面,List介面表示具有順序的集合,其中可以包含重複元素。使用此介面的實現類時,可以對列表中每個元素的插入位置進行精確的控制,使用者可以根據元素的整數索引(在列表中的位置)訪問元素,並搜尋列表中的元素。List介面中宣告的常用方法如表1所示

表1 List介面中宣告的常用方法
方法宣告 方法功能
void add(int index,Object element) 在列表的index位置新增元素
Object remove(int index) 刪除列表中index位置的元素
Object get(int index) 返回列表index位置的元素
Object set(int index,Object element) 用指定元素替換列表中指定位置的元素
int indexOf(Object o) 返回列表中首次出現指定元素的索引,如果列表中不包含此元素,則返回-1
int lastIndexOf(Object o) 返回列表中最後出現指定元素的索引,如果列表中不包含此元素,則返回-1

List介面的實現類主要有ArrayList、Stack、Vector和LinkedList。

1、ArrayList類

ArrayList類以陣列為資料結構實現了List介面,用於表述長度可變的陣列列表。在ArrayList中使用物件陣列儲存資料,呼叫new ArrayList()後,它會預設初始化一個size=10的陣列。每次add操作都要檢查陣列容量,如果不夠,重新設定一個初始容量為1.5倍大小的新陣列,然後再把每個元素複製過去。在陣列中間插入或刪除,都要移動後面的所有元素。

ArrayList實際上是一種容器(Collection),其中可以儲存任意數量的元素,每個元素都是一個物件。宣告和建立ArrayList物件時,還需要指定元素的型別,例如

ArrayList<String> notes=new ArrayList<String>();

ArrayList類中的常用方法

ArrayList類中的常用方法
方法宣告 方法功能
public boolean add(E o) 向ArrayList容器中新增元素
public int size() 獲得ArrayList容器中元素的個數
public E get(int index) 返回index位置的元素
public E remove(int index) 刪除index位置的元素

2、Vector向量

Vector類也實現了List介面,也用於表述長度可變的物件陣列表列。與ArrayList的差別是:Vector是同步(執行緒安全)的,執行效率低,主要用於線上程環境中;而ArrayList是不同步的,適合在單執行緒環境中使用。除了實現了List介面中定義的方法外,Vector常用方法如下表所示

Vector類中的常用方法
方法宣告 方法功能
public Vector() 構造一個空向量,使其內部資料陣列的大小為10,其標準容量增量為零
public E elementAt(int index) 返回index位置的元素
public void addElement(E obj) 在向量末尾新增元素
public void removeElementAt(int index) 移除index位置的元素
public void insertElementAt(E obj,int index) 將指定元素插入到指定位置
public boolean removeElement(Object obj) 從此向量中移除第一個匹配項
public void remove AllElements() 從此向量中移除全部元素,並將其大小設定為零
public Object[] toArray() 返回一個陣列,包含此向量中以正確順序存放的所有元素

3、Stack堆疊

堆疊是一種“後進先出”的資料結構,只能在一端進行輸入或輸出資料的操作。java.util.Stack類繼承了Vector類,對應資料結構中以“後進先出”方式儲存和運算元據的線性表,即物件棧。

Stack類中常用的方法
方法宣告 方法功能
pubic Stack() 建立一個空Stack
pubic Object push(E item) 把項壓入棧頂
public Object pop() 移除棧頂元素
public Object peek() 檢視棧頂元素
public boolean empty() 判斷棧是否為空
public int search(Object o) 返回物件在棧中的位置,以1為基數

4、LinkedList佇列

LinkedList實現的是一個雙向連結串列。每個節點除含有元素外,還包含向前、向後的指標。在連結串列結構中,每個元素都擁有兩個指標屬性,一個是指向上一個元素的previous指標,一個是指向下一個元素的next指標,第一個元素的previous指標指向“空”,最後一個元素的next指標指向“空”。增加結點,只會對連結串列的指標進行操作,速度快。LinkedList有雙向佇列的特徵,在連結串列兩端可增刪資料。使用index查詢物件時,會以index和size/2比較,從前或從後向中間搜尋。

比較ArrayList和LinkedList的結構,可以得到以下結論。

ArrayList的remove和add(index,Object)操作代價高,需要移動後面的每個元素。

LinkedList採用連結串列資料結構實現,便於元素的插入和刪除,它的get(index)操作代價高,要先迴圈遍歷list找到Object

相關文章