JAVA 容器類的用途是 "保存對象" 並將其劃分爲兩個不一樣的概念:編程
1)Collection,一個獨立元素的序列 List Set Queue設計模式
2)Map 鍵值對數組
用數組轉出來的List,由於底層仍是個數組他有長度限制!併發
添加元素時,Collection 會根據不一樣的實現 調用 equals()spa
迭代器是一種設計模式,對於不一樣的容器使用一樣的方式去迭代元素設計
Iterator只能單向移動:並隨時準備好返回序列的第一個元素對象
1) next()排序
2) hasNext()隊列
3) remove()element
ListIterrator 是一個更增強大的Iterator,能夠雙向移動,能夠指向當前位置的前一個後後一個元素,可是隻能用於List的訪問
ArrayList:擅長隨即訪問
LinkedList: 擅長指定位置插入和刪除,但在隨即訪問上要遜色一些
Stack 棧 一般是指"後進先出"LIFO 的容器,由於最後"壓入"棧的元素,第一個"彈出"棧,LinkedList具備可以直接實現棧的全部功能的方法,所以能夠直接將LinkedList做爲棧使用,
Set :
HashSet :無序的Set
TreeSet 自動排序的Set
LinkedHashSet 帶鏈表的Set
Queue 隊列是一個典型的先進先出FIFO容器,一端放入另外一端取出,放入容器的順序與取出的順序相同,在併發編程中至關重要.
LinkedList能夠用做Queue的一種實現,LinkedList能夠向上轉型爲Queue
queue.offer()將一個元素插入到隊尾
queue.peek() 和 element()方法 都將在不移除的狀況下返回隊頭,但Peek()在隊列爲空時返回null ,
element()會拋出noSuchElementException
poll() 和remove() 移除並返回隊頭,區別隊列爲空一個null,一個異常
PriorityQueue 優先級隊列, 好比在飛機場,當飛機臨近起飛時,這架飛機的乘客能夠在辦理登記手續時排到隊頭,若是是一個消息系統那麼,某些消息比其餘消息更重要,於是須要排到隊頭
Vector,hashTable,Stack 已被淘汰