首頁 > 軟體

Java中的List介面實現類解析

2022-02-15 10:01:54

Java的List介面實現類

實現類ArrayList

ArrayList類相當於一個容量可變的動態陣列,當超過了他的大小時,類集自動增加,當物件被刪除後,陣列就可以縮小。

import java.util.*;
public class ListDemo {
    public static void main(String args[]){
        Collection c1 = new ArrayList();//範例化一個具體的子類物件
        for(int i=0;i<5;i++){
            c1.add(new Integer(i));
        }//迴圈新增5個整型類物件
        System.out.println("c1:"+c1);
        Collection c2 = new ArrayList();
        c2.addAll(c1);
        c2.remove(new Integer(3));
        c2.add("hehe");
        System.out.println("c2:"+c2);
        Iterator it = c2.iterator();
        while(it.hasNext()){
            Object obj = it.next();
            System.out.println("Iterator遍歷c2  "+obj+"t");
        }
    }
}

執行結果:

c1:[0, 1, 2, 3, 4]
c2:[0, 1, 2, 4, hehe]
Iterator遍歷c2  0    
Iterator遍歷c2  1    
Iterator遍歷c2  2    
Iterator遍歷c2  4    
Iterator遍歷c2  hehe    

注:

Collection的列印結果以方括號括住,每個元素之間以逗號相隔。由ArrayList的結構特點可知,該類取出元素有較高的效率,但元素做刪除或插入操作較慢。

實現類LinkedList

import java.util.LinkedList;
public class LinkedListDemo {
    public static void main(String args[]) {
        LinkedList linkedList = new LinkedList();
        linkedList.add("F");
        linkedList.add("B");
        linkedList.add("D");
        linkedList.add("E");
        linkedList.add("C");
        System.out.println("顯示初始化後linklist的內容:" + linkedList);
        linkedList.addLast("Z");
        linkedList.addFirst("AO");
        linkedList.add(1, "AI");
        System.out.println("顯示新增操作後linkedList內容:" + linkedList);
        linkedList.remove("F");
        linkedList.remove(2);
        System.out.println("顯示刪除操作後的linkedList內容:" + linkedList);
        linkedList.removeFirst();
        linkedList.removeLast();
        System.out.println("顯示刪除操作後linkList內容:" + linkedList);
        Object object = linkedList.get(2);
        //修改內容
        linkedList.set(2, (String) object + "Chaanged");
        System.out.println("現實操作後linklist內容:" + linkedList);
    }
}

執行結果:

顯示初始化後linklist的內容:[F, B, D, E, C]
顯示新增操作後linkedList內容:[AO, AI, F, B, D, E, C, Z]
顯示刪除操作後的linkedList內容:[AO, AI, D, E, C, Z]
顯示刪除操作後linkList內容:[AI, D, E, C]
現實操作後linklist內容:[AI, D, EChaanged, C]

Process finished with exit code 0

注:

LinkedList容器類提供了一個連結列表資料結構,通過連線指標來關聯前後兩個元素。因為LinkedList是使用雙向連結串列實現的容器,所以針對頻繁的插入或刪除元素,它適合實現棧和佇列。

實現類Vector

Vector類提供了實現了可增長陣列的功能,隨著更多元素加入其中,陣列變得更大,在刪除一些元素之後,陣列變小。Vector類的大多數操作和ArrayList類相同,區別之處在於Vector類是執行緒同步的。

import java.util.Vector;
public class VectorDemo {
    public static void main(String args[]){
        Vector v = new Vector();
        v.add("one");
        v.add("two");
        v.add("three");
        System.out.println("顯示向量初始值:"+v.toString());
        v.insertElementAt("zero",0);
        v.insertElementAt("oop",3);
        System.out.println("顯示插入後向量值:"+v.toString());
        v.setElementAt("three",3);
        v.setElementAt("four",4);
        System.out.println("顯示修改後元素向量值:"+v.toString());
        v.removeAllElements();
        System.out.println("顯示全刪除後向量值:"+v.toString());
    }
}

執行結果:

顯示向量初始值:[one, two, three]
顯示插入後向量值:[zero, one, two, oop, three]
顯示修改後元素向量值:[zero, one, two, three, four]
顯示全刪除後向量值:[]

Process finished with exit code 0

註解:

Java的集合與陣列的區別在於,在建立Java陣列時,必須明確指定陣列的長度,陣列一旦建立,其長度就不能被改變。為了使程式能方便的儲存,檢索和操縱數目不固定的一組陣列,JDK類庫建立了Java集合,所有Java集合類都位於java.util包中。另外Java集合中不能存放基本型別資料,而只能存放物件的參照。

List三個實現類

List 是有序的 Collection。

List 一共三個實現類分別是 ArrayListVector LinkedList

  • ArryList底層通過陣列實現,允許對元素進行快速隨機存取,陣列的缺點是元素之間不能有間隔。當陣列大小不滿足時,需要增加儲存能力,即將已有陣列的資料複製到新的儲存空間。插入和刪除的代價較高,適合於隨機查詢和遍歷。執行緒是不安全的。排列有序,資料可重複
  • Vector 底層通過陣列實現,支援執行緒的同步,即某一時刻只有一個執行緒能夠寫Vector,但實現同步的代價很高,存取速度比ArryList慢,執行緒安全但效率低。排列有序,資料可重複
  • LinkList 底層用連結串列實現適於資料的動態插入和刪除,但隨即存取和遍歷的速度慢。排列有序,但資料不可重複。

以上為個人經驗,希望能給大家一個參考,也希望大家多多支援it145.com。


IT145.com E-mail:sddin#qq.com