1. 程式人生 > >深入Collection集合的子介面List

深入Collection集合的子介面List

今天來理順一下Java裡面的Collection集合以及裡面的子集合,請看下面這張圖片:


Collectio集合有兩個子介面:List和Set

List的特點:元素是有序的,元素可以重複,因為該集合體繫有索引

Set的特點:元素是無序的,元素不能重複

List集合底下的三個子介面;

ArrayList:底層使用的是陣列結構,特點:查詢速度很快,還有修改,但是增刪稍慢,執行緒不同步

LinkedList:底層使用的是連結串列結構 特點:增刪速度很快,查詢速度稍慢

Vector:底層是陣列資料結構,執行緒同步,無論增刪,還是查詢效率都慢,被ArrayList取代了

先來說一下List集合的公共方法:

增:add(index,element);

刪:remove(index);

改:set(index,element);

查:get(index); && subList(from,to); && listIterator();

其中listIterator是List特有的迭代器,ListIterator是Iterator的子介面。在迭代時,不能通過集合物件的方法操作集合中的元素,因為會產生ConcurrentModificationException異常,所以在迭代時只能用迭代器的方法去操作元素,可是Iterator的方法是有限的,只能進行元素的查詢,刪除,判斷操作,如果想要 其他的操作。如新增,修改,就需要使用其子介面:ListIterator。該介面只能通過List集合的listIterator方法獲取。

分別說一下三個子介面:

ArrayList介面的相關程式碼:

import java.util.*;
public class Test01{
	public static void main(String[] args){
		method_get();
	}
	
	public static void sop(Object obj){
		System.out.println(obj);
	}
	
	public static void base_method(){
		ArrayList a = new ArrayList();
		
		//新增
		a.add("a");
		a.add("b");
		a.add("c");
		a.add("d");
		
		//獲取元素個數
		sop(a.size());
		
		//列印集合
		sop(a);
		
		//刪除元素
		a.remove("a");
		sop(a);
		
		//判斷元素
		sop(a.contains("b"));
		
		//清空集合
		//a.clear();
		
		
		//集合是否為空
		sop(a.isEmpty());
	}
	
	public static void method_2(){
		ArrayList a1 = new ArrayList();
		
		a1.add("1");
		a1.add("2");
		a1.add("3");
		a1.add("4");
		
		ArrayList a2 = new ArrayList();
		
		a2.add("3");
		a2.add("4");
		a2.add("5");
		a2.add("6");
		
		//a1.retainAll(a2);//取交集
		a1.removeAll(a2);//去掉和a2中相同的元素
	
		sop(a1);
		sop(a2);
	}  
	
	/*
		什麼是迭代器:
			是用於取出集合中元素的一種方式
	*/
	public static void method_get(){
		ArrayList a1 = new ArrayList();
		
		a1.add("java01");
		a1.add("java02");
		a1.add("java03");
		a1.add("java04");
		
		Iterator it = a1.iterator();//獲取迭代器,用於取出集合中的元素
		/*
		sop(it.hasNext());//有元素返回的是true,沒有元素返回的是false
		sop(it.next());
		sop(it.next());
		sop(it.next());
		sop(it.next());
		*/
		while(it.hasNext()){
			sop(it.next());
		}
	}
}

LinkedList介面的相關程式碼:
/*
	使用linkedlist模擬一個堆疊和佇列的資料結構
	
	堆疊:先進先出,如同一個杯子
	佇列:先進後出,如同一個水管
*/
import java.util.*;
public class linkedlist2{
	public static void main(String[] args){
		DuiLie li = new DuiLie();
		li.myAdd("java01");
		li.myAdd("java02");
		li.myAdd("java03");
		li.myAdd("java04");
		
		while(!li.isNull()){
			System.out.println(li.myGet());
		}
	}
}

class DuiLie{
	private LinkedList link;
	public DuiLie(){//一初始化就建立物件
		link = new LinkedList();
	}
	
	public void myAdd(Object obj){
		link.addFirst(obj);
	}
	
	public Object myGet(){
		return link.removeFirst();
	}
	
	public boolean isNull(){
		return link.isEmpty();
	}
}

Vector的相關程式碼:
import java.util.*;
/*
	列舉就是Vector特有取出方式
	
	發現列舉和迭代器很像:其實列舉和迭代是一樣的
	因為列舉的名稱和其方法的名稱都過長了,所以被迭代給取代了
*/
public class Vector{
	public static void main(String[] args){
		Vector v = new Vector();
		
		v.add("java01");
		v.add("java02");
		v.add("java03");
		v.add("java04");
		
		Enumeration en = v.elements();
		while(en.hasMoreElements()){
			System.out.println(en.nextElements());
		}
	}	
}