數組類Array是java中最基本的一個存儲結構,它用於存儲java
一組連續的對象或一組類型相同的基本類型的數據。 算法
Array特色:效率高,但容量固定且沒法動態改變,數組
缺點:沒法判斷其中存有多少元素,length只是告訴咱們Array的容量.多線程
Arrays類: 專門用來操做Array,提供搜索,排序,複製等框架
靜態方法. 性能
Arrays中equals():比較兩個Array是否相等,Array擁有相同元素個數,且全部對應元素兩兩相等.spa
fill():將值填入Array中.線程
sort():用來對Array進行排序.對象
binarySearch():在排好序的Array中尋找元素.排序
System.arraycopy():Array的複製.
Vector:基於Array的List,性能也就不可能超越Array,而且Vector
是「sychronizend」的,這個也是Vector和ArrayList的惟一區別.
ArrayList:同Vector同樣是一個基於Array的,但不一樣的是ArrayList
不是同步的.因此在性能上要比Vector優越一些,可是運行到多線程環境
中時,須要本身管理線程的同步問題.從其命名中能夠看出它是一種相似數組的形式進行存儲,所以它的隨機訪問速度特快.
LinkedList:LinkedList不一樣於前面兩種List,它不是基於Array的.
由於是基於鏈表實現的,data,(節點自己數據)nextNode(下一個節點)
因此更適用於 插入,刪除操做.
【注意全部的List能夠有null元素,元素能夠重複】
移除List重複元素:
方法一:經過HashSet剔除 (本人喜歡使用的方式:使用的是hash數組不能產生重複數據的特性,來轉換LIST)
}
HashSet:set同list同樣都實現了Collection接口,可是他們的實現方式卻大不同. 【list是以Array爲基礎的,而Set則是HashMap的基礎上實現的】
HashSet的存儲方式是把HashMap中的Key做爲Set的 對應存儲項,這也是爲何在Set中不能像在List中同樣有重複的項的根本緣由,由於HashMap的key是不能有重複的。HashSet能快速定位 一個元素,可是放到HashSet中的對象須要實現hashCode()方法0。
TreeSet:Treeset將放入其中的元素按序存放,這就要求你放入其中的
對象時可排序的,這就用到了集合框架提供的另外兩個實用類
Comparable和Comparator。
【一個類是可排序的,它就應該實現Comparable接口.】
【有時多個類具備相同的排序算法,那就不須要重複定義相同的排序算法,只要實現Comparator接口便可】
TreeSet是SortedSet的子類,它不一樣於HashSet的根本就是TreeSet
是有序的,它是經過SortedMap來實現的.
HashMap:也用到了哈希碼的算法,以便快速查找一個鍵,
TreemMap對鍵按序存放,所以它有一些擴展的方法,好比firstkey(),lastkey()等. 當多個線程訪問treemap時,要本身爲之提供外同步.
HashTable:不容許空鍵或值.Hashtable的方法是Synchronize的,
在多個線程訪問Hashtable時,不須要本身爲它的方法實現同步.
【Map有兩種比較經常使用的實現:HashTable.HashMap和TreeMap.】