數據量大用對象存儲,對象量大用容器(集合)/數組存儲。然而,數組是定長的,而且要求是同一類型的。html
存儲方式的不一樣,稱爲數據結構。正由於數據結構不同,因此有這麼多集合類型。java
====================具體方法查API==================== api
容器(集合)地圖:數組
Collection【interface】數據結構
Set【interface】(無序,不可重複)併發
HashSet函數
TreeSetspa
List【interface】(有序,可重複).net
LinkedList線程
ArrayList
Vector
Map【interface】(鍵值對)
HashMap
TreeMap
HashTable
====================具體方法查API====================
Collection
有增(add、addAll)、刪(remove、removeAll)、查(contains)、取(iterator)、取交集(retainAll)、hashCode、equals、size等經常使用方法。
iterator詳解:
迭代器接口,調用此方法後,返回一個內部類對象(由於iterator是接口),這個內部類對象是全部集合類型的內部類,對外暴露有三個方法:hasNext、next、remove。
注意:不管使用何種迭代器,均可以迭代器和集合併發操做(迭代器是集合的引用,對迭代器的操做就是對集合的操做),不然拋出異常。
List
與擁有Collection的所有方法,另外特有的方法以下:
增:add(index,element); addAll(index,collection);
刪:remove(index);
改:set(index,element);
查:get(index); subList(start,end); listIterator();
listIterator迭代器功能比Collection強大,除了包含Collection的方法,還能夠set、previous、hasPrevious等等。
ArrayList
數組結構存儲的List,增、刪較慢,查較快。初始長度爲10,超出後new一個新數組(長度爲50%原長,Vector爲100%),copy原數組過去。
LinkedList
鏈表結構存儲的List,增、刪較快,查較慢。
Vector(已拋棄)
數組結構存儲的List,增、刪、改、查都慢,jdk1.0出現的(當時集合還沒出現),jdk1.2後基本被ArrayList代替,惟一區別是Vector是線程同步的,ArrayList線程不一樣步。具備特有的遍歷方法——枚舉(已被迭代器取代,不建議使用)。
Set
和Collection方法同樣。
HashSet
hash表結構存儲的Set,線程非同步。
添加元素時,先對比hashCode值,再equals判斷(ArrayList是隻經equals判斷),查、刪同理。遍歷可知無序。
TreeSet
Tree結構存儲的Set,會對集合中的元素進行排序(默認是ASCII碼錶)。添加的元素具有比較性或者Tree集合具有。
一、元素比較性:添加元素(類)時,此元素(類)必須實現Comparable接口,實現compareTo方法(即定義排序規則)。採用二叉樹判斷法(好比左小右大)排序(元素邊多會自動折中判斷)。順序遍歷,從下到上,從左到右;逆序遍歷,從右到左,從下到上。
二、Tree集合一初始化時就具有比較性(參照TreeSet的構造函數):本身寫一個類實現Comparator接口,實現compare方法,而後再構造Tree時傳入該類的實例。【經常使用】
當元素(1)和容器(2)都具有比較性,以容器(2)爲主。
Map
存儲鍵值對,增 (put注意返回值、putAll),刪(clear、remove)、判(containsValue、containsKey、isEmpty)、獲(get、size、values取全部的值返回到一個Collection)、entrySet、keySet。【Set的底層就是使用了Map的方法】
Hashtable
jdk1.0時代,鍵/值不能爲空,線程同步。
HashMap
jdk1.2出現,鍵/值能夠爲空,線程不一樣步,代替了Hashtable的存在。【注意:null能夠做爲鍵】
TreeMap
能夠給Map中的鍵排序。