1. 程式人生 > >List Set Map以及子介面用法總結

List Set Map以及子介面用法總結

Collection

├List
│├LinkedList
│├ArrayList
│└Vector
│ └Stack
└Set
Map
├Hashtable
├HashMap

└WeakHashMap

list 和set 有共同的父類Collection  它們的用法也是一樣的 唯一的不太就是set中不能有相同的元素 list中可以 序列 集合

list和set的用途非常廣泛 list可以完全代替陣列來使用

map 是獨立的合集 它使用鍵值對的方式來儲存資料 鍵不能有重複的 值可以用 map不像上邊兩種集合那個用的廣泛 不過在servlet 和jsp中 map可是絕對的重中之重 頁面之間傳值全靠map

list有序可重複 set無序不可重複

list有arraylist(隨機存取非常高效 便於查詢)和linkedlist(便於刪除增加 不方便查詢 從第一個開始) vector

   arraylist 和 vector區別如下:

   arraylist :執行緒不安全(同時同一個)   高效(一個優點)      擴容慢 一次擴充之前空間的一半  

   vector:執行緒安全(允許多個執行緒一起)  現成安全帶來的較低效率 一次擴充之前空間的一倍

   
   

 List Set Map主要方法:

List

基本資訊
boolean     isEmpty()

int             size()

boolean     contains(Object o)

Iterator<E>     iterator()

增刪改查(序號 以及序號的資料)

void            add(E e)

boolean     remove(Object o)

Entryobject             get(int index)

int             indexOf(Object o) 預設firstindex

int             lastIndexOf(Object o)

操作

Object[]     toArray()  注意是object型別



Set

基本資訊:
boolean     isEmpty()

int             size()

boolean     contains(Object o)

Iterator<E>     iterator()

增刪改查 set沒有任何差 除了迭代其

boolean     add(E e)

boolean     remove(Object o)

操作

Object[]     toArray()

Map
基本資訊:contains鍵或者值
int     size()

boolean     isEmpty()

boolean     containsKey(Object key)

boolean     containsValue(Object value)

增刪改查:可以修改replace
Valueobject             get(Object key)

Valueobject             put(K key, V value)

Valueobject             replace(K key, V value)

Valueobject             remove(Object key)
Removes the mapping for a key from this map if it is present (optional operation).

default boolean     remove(Object key, Object value)
Removes the entry for the specified key only if it is currently mapped to the specified value.



操作:
Set<K>     keySet()  set可以toarray

Collection<V>     values()

Set<Map.Entry<K,V>>     entrySet()


Hashtable介紹:

類實現一個雜湊表,該雜湊表將鍵對映到相應的值。任何非 null 物件都可以用作鍵或值。為了成功地在雜湊表中儲存和獲取物件,用作鍵的物件必須實現 hashCode 方法和 equals 方法。

Hashtable 的例項有兩個引數影響其效能:初始容量 和載入因子。容量 是雜湊表中桶 的數量,初始容量 就是雜湊表建立時的容量。注意,雜湊表的狀態為 open:在發生“雜湊衝突”的情況下,單個桶會儲存多個條目,這些條目必須按順序搜尋。載入因子是對雜湊表在其容量自動增加之前可以達到多滿的一個尺度。初始容量和載入因子這兩個引數只是對該實現的提示。關於何時以及是否呼叫 rehash 方法的具體細節則依賴於該實現。

 HashTable和HashMap區別

第一,繼承不同。

public class Hashtable extends Dictionary implements Map
public class HashMap  extends AbstractMap implements Map

第二

Hashtable 中的方法是同步的,而HashMap中的方法在預設情況下是非同步的。在多執行緒併發的環境下,可以直接使用Hashtable,但是要使用HashMap的話就要自己增加同步處理了。因為執行緒安全的問題,HashMap效率比HashTable的要高。

第三

Hashtable中,key和value都不允許出現null值。

在HashMap中,null可以作為鍵,這樣的鍵只有一個;可以有一個或多個鍵所對應的值為null。當get()方法返回null值時,即可以表示 HashMap中沒有該鍵,也可以表示該鍵所對應的值為null。因此,在HashMap中不能由get()方法來判斷HashMap中是否存在某個鍵, 而應該用containsKey()方法來判斷。

第四,兩個遍歷方式的內部實現上不同。

Hashtable、HashMap都使用了 Iterator。而由於歷史原因,Hashtable還使用了Enumeration的方式 。

第五

雜湊值的使用不同,HashTable直接使用物件的hashCode。而HashMap重新計算hash值。

第六

Hashtable和HashMap它們兩個內部實現方式的陣列的初始大小和擴容的方式。HashTable中hash陣列預設大小是11,增加的方式是 old*2+1。HashMap中hash陣列的預設大小是16,而且一定是2的指數。