1. 程式人生 > >JavaSE筆記--集合框架

JavaSE筆記--集合框架

List(有序)

Set(無序、不重複)

Map

ArrayList

LinkedList

Vector

HashSet

TreeSet

HashMap

Hashtable

TreeMap

基於陣列

基於連結串列

基於陣列

基於雜湊表

基於二叉數

基於雜湊表

基於雜湊表

基於紅黑樹

尾部追加查詢快,中間插入刪除慢

尾部追加和查詢慢,中間插入刪除快

ArrayList一樣,但多執行緒同步

hashcode碼為標識,效能優於TreeSet適合快速查詢

需要排序時使用

Map中插入、刪除和定位元素

效率沒HashMap高,但執行緒同步

按自然循序或自定義順序遍歷鍵

允許為空

允許為空

允許為空

允許有一項為空

不允許為空

允許一項為空

不允許為空

不允許為空

0.引言

      資料結構是以某種形式將資料組織在一起的集合。資料結構不僅儲存資料,還支援那些訪問和處理的操作。比如ArrayList它是一種將資料儲存線上性表中的資料結構,另外Java還提供了能有效地組織和操作資料的資料結構,這些資料結構通常稱之為Java集合框架(Java Collections Framework)。

      在面對物件思想裡,一種資料結構被稱之為一個容器,它是一個能儲存資料或者元素的物件。定義一種資料結構從本質上講就是定義一個類,資料結構類應用使用資料域儲存資料,並提供方法支援查詢、插入和刪除等操作。因此建立一個數據結構就是建立這個類的一個例項。然後用這個例項上的方法操作這個資料結構。

      集合框架支援兩種型別的容器:儲存一個元素集合,簡稱集合(collection)和儲存鍵值對,稱之圖(map)。


1.集合

      集合(Collection)包括三種類型:規則集(Set)、線性表(List)、佇列(Queue)。Set例項用於儲存一組不重複的元素,List的例項用於儲存一個由元素構成的有序集合,Queue的例項用於儲存用先進先出方式處理的物件。這些集合的特性都被定義在介面中,而它的實現是在具體類中提供的。

      Collection介面是util包下的,所以在使用Collection下的方法要導util包,提供了具體的子介面(List和Set)。Collections有一個方法可對元素排序sort(List list);


       主要方法:

          boolean  add(E e)新增 

          boolean  clear()清除  

          boolean   isEmpty()判斷容器是否包含元素 

          boolean remove(Object o)在此collection中移除指定元素 

          Iterator<E>  iterator()返回在此collection的元素上進行迭代的迭代器

          int  size()返回此collection中的元素數

2.子介面 List<E> extends Collection<E>:有序,可重複

     新增方法:

        void add(int index,E element) 在列表的指定位置插入指定元素

        E get(int index)返回列表中指定位置的元素

        E remove(int index)移除列表中指定位置的元素

        E set(int index,E element)用指定元素替換列表中指定位置的元素

        Object[] toArray()返回按適當順序包含列表中所有元素的陣列

   1). ArrayList<E>類實現List<E>介面:基於陣列,尾部追加查詢快,中間插入刪除慢,允許為空

         常用方法:

            ArrayList()構造一個初始初始為10的空列表

            ArrayList(Collection<? extends E> c)構造一個包含指定collection的元素列表

            ArrayList(int initialCapacity)構造一個具有指定初始容量的空列表

            void trimToSize()將此ArrayLIst例項的容量調整為列表的當前大小

        例項

package com.example.test;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class Demo01 {
	public static void main(String[] args) {
		List list=new ArrayList();
		list.add("hello");
		list.add(12);
		list.add(true);
		list.add(1,"world");//輸出helloworld12true
		list.set(0, "hello1");//輸出hello1world12true
		list.remove(1);//輸出hello112true
		for (int i = 0; i < list.size(); i++) {
			System.out.print(list.get(i));;
		}
		System.out.println();
		list.clear();
		list.add("hello2");
		list.add(11);
		list.add(false);
		//迭代器的使用
		Iterator it=list.iterator();//it先指向第一個元素的前面
		while(it.hasNext()){//再判斷是否有下一個元素
			Object obj=it.next();//有取得下一個元素
			System.out.print(obj);
		}
	}
}

輸出:

       2).LinkedList<E>實現List<E>介面:基於連結串列,尾部追加和查詢慢,中間插入刪除快

        方法與ArrayList相同

       3).Vector 底層基於陣列的實現,是同步的(在多執行緒環境安全)

        方法與ArrayList相同

2.子介面 Set<E> extends Collection<E>:無序,不能出現重複元素,至多包含一個null元素

       1).HashSet<E>實現Set<E>介面,基於雜湊碼(HashCode),允許有一項為空
        例項:
package com.example.test;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
public class Demo02 {
	public static void main(String[] args) {
		Set set=new HashSet();
		set.add("hello");
		set.add(12);
		set.add(null);
		set.add(true);
		set.add(null);//只輸出一個null,不會報錯
		Iterator it=set.iterator();
		while(it.hasNext()){
			Object obj=it.next();
			System.out.print(obj);
		}
	}
}
輸出
     2).TreeSet<E>實現Set<E>介面,基於樹的實現,不允許出現為空,並插入的型別一致,不然會報錯

3.圖    

        圖是一種依照鍵值儲存元素的容器,鍵值很像下標。在List中,下標是整數,在Map中,鍵值可以是任意型別的物件。圖中不能有重複的鍵值,每個鍵值都對應一個值,一個鍵值和它的對應值構成一個條目,真正在圖中儲存的是這個條目。

        圖的型別有三種:雜湊圖HashMap、鏈式雜湊圖LinkedHashMap和樹形圖TreeMap。

        常用方法:

        void clear() 從此對映中移除所有對映關係

        V get(Object key) 返回指定鍵所對映的值,沒有返回null

        Set<K> keySet()返回此對映中包含的鍵的Set檢視,就是得到所有的key

        V put(K key,V value)將指定的值與此對映中的指定鍵關聯

        V remove(Object key)如果存在一個鍵的對映關係,將其移除

        int size()返回此對映中的鍵值對映關係數

        Collection<V> values()得到所有的值

    1).HashMap<K,V>實現Map<K,V>介面,基於雜湊碼,允許有一項為空,不同步
    2).TreeMap<K,V>實現Map<K,V>介面,基於紅黑樹,不允許為空
    3).Hashtable<K,V>實現Map<K,V>介面,底層基於雜湊表,是同步的

    例項:

package java0401;

import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;

public class Demo01 {
	public static void main(String[] args) {
		//Map map=new HashMap();
		Map map=new TreeMap();
		map.put(1001, "tom");
		map.put(1002, 123);
		map.put(1003, null);
		 Set<Map.Entry> set=map.entrySet();
		 for (Map.Entry entry : set) {
			System.out.println(entry.getKey()+":"+entry.getValue());
		}
		//圖的遍歷
		/*Set set=map.keySet();
		Iterator it=set.iterator();
		while(it.hasNext()){
			System.out.println(it.next());
		}*/
		//獲得所有的VALUE
	/*	Collection cl=map.values();
		Iterator it=cl.iterator();
		while(it.hasNext()){
			System.out.println(it.next());
		}*/
		//map.clear();
		//map.remove("hello");
		//System.out.println(map.get("hello"));//得到hello對映的值,沒有返回NULL
	}
}

結果