1. 程式人生 > >java 集合ArrayList實現類及List介面常用方法及LinkedList和Vector的特點

java 集合ArrayList實現類及List介面常用方法及LinkedList和Vector的特點

1.集合結構

  • Collection介面
    • List介面:儲存有序的,可重複的元素
      • ArrayList(主要的實現類)、LinkedList、Vector
    • Set介面:儲存無序的,不可重複的元素
      • HashSet、 LinkedHashSet、TreeSet
  • Map介面:儲存“鍵-值”對的資料
    • HashMap(主要實現類)、LinkedHashMap、TreeMap、HashTable(子類:Properties)

2.List介面詳解

  1. Java中陣列用來儲存資料的侷限性
  2. List集合類中元素有序、且可重複,集合中的每個元素都有其對應的順序索引。
  3. List容器中的元素都對應一個整數型的序號記載其在容器中的位置,可以根據序號存取容器中的元素。
  4. JDK API中List介面的實現類常用的有:ArrayList、LinkedList和Vector。
  5. List新增加的方法,及demo
public class TestList {
	//ArrayList : List的主要實現類
	/*	List中相對於Collection新增的方法
	 * 	void add(int index, Object ele):在指定的索引位置index新增元素
		boolean addAll(int index, Collection eles):在指定索引位置,加上一個集合
		Object get(int index):獲取指定索引的元素
		Object remove(int index):刪除指定索引位置的元素
		Object set(int index, Object ele):設定指定的索引的位置為ele
		int indexOf(Object obj):返回obj在集合中首次出現的位置,沒有則返回-1;
		int lastIndexOf(Object obj):返回obj在集合最後一次出現的位置,沒有則返回-1;
		List subList(int fromIndex, int toIndex):返回從fromIndex到toIndex結束的子list,左閉右開的區間			
	 */
	
	@Test
	public void testList1() {
		List list = new ArrayList();
		list.add(123);
		list.add(456);
		list.add(new String("aaa"));
		list.add("gg");
		System.out.println(list);//[123, 456, aaa, gg]
		list.add(0, "IM");
		System.out.println(list);//[IM, 123, 456, aaa, gg]
		Object obj = list.get(1);
		System.out.println(obj);//456
		
		list.remove(0);
		System.out.println(list.get(0));//456
		
		list.set(0, 520);
		System.out.println(list.get(0));//520
			
	}
	
	@Test
	public void testList2() {
		List list = new ArrayList();
		list.add(123);
		list.add(456);
		list.add(new String("aaa"));
		list.add("gg");
		list.add(456);
		System.out.println(list.indexOf(456));//1
		System.out.println(list.lastIndexOf(456));//4
		
		System.out.println(list.indexOf(123) == list.lastIndexOf(123));//返回true意味著集合中只有一個123元素或一個也沒有
		System.out.println(list.indexOf(4444));//-1
		
		List list1 = list.subList(0, 3);
		System.out.println(list1);//[123, 456, aaa]
	}
	
}

  1. List操作資料常用的方法:
    增(add())
    刪除(remove)
    改(set(int index,Object obj))
    查(get(int index))
    插入(add(int index,Object obj))
    長度(size())

3.List實現類之一:ArrayList

  1. ArrayList 是 List 介面的典型實現類
  2. 本質上,ArrayList是物件引用的一個變長陣列
  3. ArrayList 是執行緒不安全的,而 Vector 是執行緒安全的,即使為保證 List 集合執行緒安全,也不推薦使用Vector
  4. Arrays.asList(…) 方法返回的 List 集合既不是 ArrayList 例項,也不是 Vector 例項。 Arrays.asList(…) 返回值是一個固定長度的 List 集合
  5. 新增的方法及用法,參考上面的程式碼即可。

4.List實現類之二:LinkedList

  1. 對於頻繁的插入或刪除元素的操作,建議使用LinkedList類,效率較高
  2. 新增的方法
/*
void addFirst(Object obj):在0的位置新增一個obj
void addLast(Object obj):在最後的位新增一個obj
Object getFirst():獲取第一個元素
Object getLast():獲取最後一個元素
Object removeFirst():刪除第一個元素
Object removeLast():刪除最後一個元素
*/

5.List 實現類之三:Vector

  1. Vector 是一個古老的集合,JDK1.0就有了。大多數操作與ArrayList相同,區別之處在於Vector是執行緒安全的。
  2. 在各種list中,最好把ArrayList作為預設選擇。當插入、刪除頻繁時,使用LinkedList;Vector總是比ArrayList慢,所以儘量避免使用。
  3. 新增加的方法:
/*
void addElement(Object obj)
void insertElementAt(Object obj,int index)
void setElementAt(Object obj,int index)
void removeElement(Object obj)
void removeAllElements()
*/

6.拓展ListIterator介面

  1. List 額外提供了一個 listIterator() 方法,該方法返回一個 ListIterator 物件, ListIterator 介面繼承了 Iterator 介面,提供了專門操作 List 的方法:
/*
void add():將指定的元素插入列表(可選操作)。
boolean hasPrevious():如果以逆向遍歷列表,列表迭代器有多個元素,則返回 true。
Object previous(): 以正向遍歷列表時,如果列表迭代器有多個元素,則返回 true(換句話說,如果 next 返回一個元素而不是丟擲異常,則返回 true)。
Boolean hasNext(): 以正向遍歷列表時,如果列表迭代器有多個元素,則返回 true(換句話說,如果 next 返回一個元素而不是丟擲異常,則返回 true)。
Object next():返回列表中的下一個元素。
*/
  1. 上面有逆向遍歷的方法