Java的集合分爲三種
一、集合Set
Set集合的元素不區分順序,且不容許出現相同元素。這裏一樣的元素指的是以equals()方法判斷的
二、列表List
List列表中的記錄元素添加的順序,並且能夠填充相同的元素。
三、映射Map
映射中包含的都是「鍵(Key)-值(value)」對,且一個鍵對應一個值。因此鍵是不能夠重複的。
注意:Java集合中只能存儲引用類型的引用,且和數組同樣集合存儲的只是引用並不是對象。 html
Set:
java.util.Collection是Set與List集合接口的根接口這個接口定義一個有關集合操做的廣泛方法
例:Set<String> set=new HashSet<String>();
boolean add(Object o); 爲容器添加一個元素
boolean remove(Object o); 移除一個元素
int size(); 返回數組大小
boolean isEmpty(); 判斷集合是否爲空不包含任何元素
boolean contains(Object o); 判斷集合當中是否包含指定的元素
void clear(); 清除全部
Iterator iterator(); 返回迭代器,一般是用來對多種容器的統一遍歷
Object[] toArray(); 將集合轉換爲數組 java
List:
List接口規定使用者能夠對列表元素的插入位置進行精確的控制,並添加了根據元素來訪問集合某個指定的元素的功能
例:List<String> list=new Vector<String>();
void add(int index,Object element); 往指定位置添加或插入新元素
Object get(int index); 返回指定下標的元素
Object set(int index,Object element); 設定或修改指定位置的元素此方法沒有插入功能
int indexOf(Object o); 獲取指定元素在集合當中的下標,若是沒有找到則返回一個負值,通常爲-1
Object remove(int index); 移除下標指定的元素 數組
Map:
java.util.Map描述了映射結構,Map結構容許以鍵集、值集合或鍵-值對映射關係集的形式來訪問和查看某個映射的內容
例:Map<Integer,String> map=new Hashtable<Integer,String>();
Object put(Object key,Object value); 添加一個鍵-值對,若是key已經存在,則修改其對應的value
Object get(Object key); 獲取key對應的value,若是key不存在則返回null
boolean isEmpty(); 判斷當前映射是否爲空
void clear(); 清除映射當中的所有內容
int szie(); 返回當前映射中有多少對鍵值
boolean containsKey(Object key); 判斷當前映射中是否存在指定的key
boolean containsValue(Object value); 判斷當前映射中是否存在指定的value
Set keySet(); 返回當前映射中全部的key集合
Collection values(); 返回當前映射中全部的value集合 安全
ArrayList:
1、java.util.ArrayList描述了長度可變的數組列表
例:ArrayList list=new ArrayList();
2、其實ArrayList類內部維護的是一個一維數組,你能夠利用ArrayList若是使用默認的構造函數,那麼默認的輸入大小爲10,當咱們往裏添加的元素數量超過了內部維護的數組的大小,那麼每一次的添加都會動態的產生一個同樣大小的一維數組,而後在將進行數組拷貝工做。也就是說若是大量的使用自動增加的功能,效率是十分的低的!
咱們能夠利用public void ensureCapacity(int minCapacity)這個方法一次性擴充數組的長度,減小了沒必要要的反覆賦值數組的浪費效率的操做!
3、ArrayList列表容許元素取值爲null,public void trimToSize()能夠將當前ArrayList的大小更改成實際存儲元素的大小,因爲ArrayList內部維護的數組,全部當進行從中間刪除或插入對象的時候效率上是十分低的所以咱們可使用以鏈表形式實現的LinkedList。 數據結構
LinkedList:
4、java.util.LinkedList以鏈表的形式實現了List接口,LinkedList加入了在進行插入與刪除動做時有較好效果的方法:
例:LinkedList<String> linkedList=new LinkedList<String>();
public void addFrist(E arg); 往鏈表頭插入元素
public void addLast(E arg); 往鏈表尾插入元素
public E getFrist(); 獲取鏈表首元素
public E getLast(); 獲取鏈表尾元素
public E removeFrist(); 移除鏈表首元素,並返回移除的元素
public E removeLast(); 移除鏈表尾元素,並返回移除的元素 多線程
Vector:
java.util.Vector也是描述一個可變長度的數組與ArrayList的差異:Vector是同步(線程安全的)多個線程同時操做同一個Vector,所以運行效率低,主要用於多線程的環境下,而ArrayList是不一樣的,適合在單線程環境下使用。
例:Vector list=new Vector();
經常使用方法(除實現List接口之外的方法):
public Object elementAt(int index); 返回指定下標的元素
public void addElement(Object obj); 爲容器添加一個元素,同add同樣
public void removeElementAt(int index); 刪除指定下標的元素
public void insertElementAt(Object obj,int index); 指定位置插入元素
public boolean removeElement(Object obj); 查找元素,並刪除
public void removeAllElement(); 刪除全部元素
public Object[] toArray(); 將容器轉換爲數組
注意:看完下面的例子後不難發現ArrayList和Vector的用法徹底相同當咱們運行的結果是同樣,也就是咱們不能從結果中看到區別,可是在多線程中Vector表現出更好的安全性…… 函數
Stack:
java.util.Stack類繼承自Vector類,對應了數據結構中棧這種概念,實際上提供了一種後進先出的數據存儲方式和操做數據的對象棧。
例:Stack<String> s=new Stack<String>();
Stack類提供了常規的棧操做方法:
public Stack(); 建立一個無限的存儲空間,這事理論上的
public Object push(E item); 向棧內壓入一個新的數據,返回當前壓入的數據
public Object pop(); 從棧內彈出(刪除)最後一個壓入的數據,實現彈棧的操做,返回彈出(刪除)的數據
public Object peek(); 查看並返回堆棧棧頂的數據(也就是咱們最後一次壓入棧內的數據),但並無彈出它
public boolean empty(); 判斷棧是否爲空
public void clear(); 清空棧
public int search(Object o); 查找指定元素在棧中的索引,注意此索引由1開始,並且返回的索引時從棧頂向下計算的 工具
Iterator:
java.util.Iterator接口描述的是以統一方式對各類集合元素進行遍歷/迭代的工具,也稱「迭代器」,Iterator容許當前遍歷到的元素進行移除和其餘操做
例:ArrayList<String> Array=new ArrayList<String>();
Iteratoc<String> it=Array.iterator();
方法:
boolean hasNext(); 判斷是否還有下一個元素
Object next(); 返回下一個元素的引用
void remove(); 移除當前遍歷到的元素 性能
TreeSet:
例:
TreeSet<String> set=new TreeSet<String>();
java.util.TreeSet類繼承自Set接口與java.util.SortedSet接口,TreeSet也是JavaSE中惟一實現了SortedSet接口的類。它描述了一種能夠排序的集合,在將對象元素添加到TreeSet集合中時會自動按照某種比較規則將其插入到有序的對象序列中,以保證TreeSet集合元素組成的對象序列時刻按照「升序」排列,默認的排序規則是對象的哈希碼進行排序,若是對象有本身的一套排列順序,要定義一個實現了。
java.util.Comparator接口的對象,並實現接口中的compare()且compare()必須返回int。 spa
HashMap:
例:
HashMap<Integer,String> hm=new HashMap<Integer,String>();
1、java.util.HashMap類實現了java.util.Map接口,該類基於哈希表實現了前述的映射集合結構。
2、HashMap結構不保證其中元素(映射信息)的前後順序,而且容許使用null值與null鍵
3、當集合中不存在當前檢索的key所對應的映射值時,HashMap的get()方法會返回空值null,而不會運行出錯。
4、影響HashMap的性能的鏈各個參數:初始容量(Initial Capacity)
加載因子(Load Factor)
HashSet:
1、java.util.HashSet類實現了Set接口,描述典型的Set集合結構,主要用於快速查找。
2、HashSet一樣不容許出現重複的元素,不保證集合元素的順序。
3、HashSet的排序規則爲哈希碼法。
若是用迭代器來遍歷容器當中的元素,且想按照加入順序排列,則可使用LinkedHashList容器。
4、HashSet中對象的比較順序爲,先判斷hashCode()方法返回的值是否相同,在使用equals()方法比較。當兩個方法都爲true的時候才認定兩個爲相同對象。
HashSet中只容許包含一個null元素。
HashSet 主要用於快速查找,一樣不容許出現重複的元素,不保證集合元素的順序,只容許包含一個null元素。
TreeSet 按照「升序」進行排列
linkedHashSet 按照加入順序進行排列
Hashtable:
1、java.util.Hashtable與HashMap做用基本相同,也實現了Map接口,採用哈希表的方式將key映射對應的value。
2、Hashtable與HashMap的差異:
一、Hashtable中元素的key和value均不容許爲null,而HashMap中則容許
二、Hashtable是同步的,即線程安全,效率相對要低一些。適合在多線程環境下使用,而HashMap是不一樣步的,效率相對高一些,適合單線程環境下使用。
3、Hashtable與HashMap的使用格式徹底相同。
Enumeration:
1、java.util.Enumeration接口做用與Iterator接口相似,但只提供了遍歷Vector和Hashtable(及其子類Properties)類型集合元素的功能,並且不支持集合元素的移除操做
2、方法:
boolean hasMoreElements() 判斷是否還有元素
E nextElement() 獲取元素
Collections:
java.util.Collections對象中定義了多種集合操做方法,實現了對集合元素的排序、取值、批量拷貝、集合結構轉換、循環移位以及匹配性檢查等功能
經常使用方法:
public static void sort(List list); 將List升序排列
public static void reverse(List list); 翻轉List中全部元素的順序
public static void shuffle(List list); 將List中元素的順序打亂
public static void copy(List dest,List src); List的複製,目標List實際元素數量必須比List大,且複製到目標數組的起始位置
public static ArrayList list(Enumeration e); 將實現了Enumeration接口的類對象轉換爲ArrayList
public static int frequency(Collection c,Object o); 獲取參數2,Object o在容器中出現的次數
public static T max(Collection coll); 獲取最大元素
public static T min(Collection coll); 獲取最小元素
public static void retate(List list,int distance); 將容器中的元素向後移distance位
Arrays:
1、java.util.Arrays對象定義了多種數組操做方法,實現了對數組元素的排序、填充、轉換爲列表或字符串形式、加強的檢索和深度比較等功能。
2、主要方法:
public static List asList(<T>[] a); 將數組轉換爲List列表
public static void sort(<T>[] a); 數組元素的升序排列
public static int binarySearch(<T>[] a,<T> key); 獲取key元素在數組中的下標
public static String toString(<T>[] a); 將整個數組全部的元素鏈接爲一個字符串返回
Set:不區分元素的順序,不容許出現重複的值
list:區分元素的順序,且容許出現重複的值
map:採用key——values的,不容許有重複的鍵,每一個鍵最多對應一個值
java集合只能保存引用類型的數據,是對象的引用
Collection接口描述set和list集合類型的根接口
相關方法:
add()若是增長重複元素,則增長失敗,返回false
contains()判斷是否包含有某個元素
iterator()返回成一個迭代器
List能夠對元素的插入位置進行精確控制,根據元素索引訪問元素等功能
set(index,elemetn)修改指定索引下的元素
Map關係集的形式查看某個映射的內容
put(object key,object values)增長一個新的值
get(object key)查找key上面的值
Set keySet()將全部的key返回到一個set中
Collection values()將全部的值返回到一個collection集合中
Collection——set——hashset/treeset
Collection--list——Arraylist/vector——Stack(棧)
Map——hashmap/Treemap/hashtable——properties
StringTokenizer——Enumeration(不是很經常使用)
ArrayList類實現了list接口,用於表述長度可度的數組列表
他容許取值爲null,除實現了list接口的全部功能外,還有如下方法
ArrayList()建立一個容量爲10的null的列表
ArrayList()建立一個指定長度的null的列表
ensureCapacity(int minCapacity)增長此 ArrayList 實例的容量,以確保它至少可以容納最小容量參數所指定的元素數。
trimToSize()將此 ArrayList 實例的容量調整爲列表的當前大小(也就是說,出除後面爲null的值)
相關實例請查看:http://hi.bccn.net/space-447825-do-blog-id-16964.html
Vector也實現了list接口,其描述的也是可變長度的對象數組
是同步(線程安全的),運行效率要低一些,主要用於多線程環境中,而arryalist是不一樣步的,適合在單純種環境中使用
vector()建立一個長度爲10的vector容器
elementAt(int index)獲得指定的值
addElement(Object ojb)增長值
removeElementAt(int index)移除指定的值
insertElecentAt(E obj,index)在指定位置查入相關的值
removeElement(object obj)刪除值,若是有重複的只刪除第一次出現的
Object[] toArray()將當前集合中的元素所有返回到一個數組中
相關實例請查看:http://hi.bccn.net/space-447825-do-blog-id-16965.html
Stack繼承了vector,對應了數據結構中的「後進先出」存儲和操做數據結象棧
Stack()建立 一個空的棧
push()在當前棧中壓入一個數據, 把項壓入堆棧頂部。
pop()移除堆棧頂部的對象,並做爲此函數的值返回該對象。
peek() 查看堆棧頂部的對象,但不從堆棧中移除它。
clear()清空棧
search(object o)查看棧中的位置,返回最進的一個。以 1 爲基數
相關實例請查看:http://hi.bccn.net/space-447825-do-blog-id-16966.html
Iterator接口描述的是以統一方式對各類集合元素遍歷/迭代工具,也稱"迭代器"
容許在遍歷過程當中移除集合中的元素
hasNext()若是仍有元素能夠迭代,則返回 true
next()返回迭代的下一個元素
remove()從迭代器指向的 collection 中移除迭代器返回的最後一個元素
相關實例請查看:http://hi.bccn.net/space-447825-do-blog-id-16967.html
HashSet類實現了set接口,描述典型的set集合結構
不容許出現重複元素,不保證集合中元素的序
容許包含值爲null的元素,但最多隻能有一個,
相關實例請查看http://hi.bccn.net/space-447825-do-blog-id-16968.html
TreeSet類也實現了Set,它描述的是set的一種變體——能夠實現排序功能的集合
將對象元素添加到TreeSet集中時會自動按照某種比較規則將其插入到有序的對象序列中
以保證TreeSet集合元素組成的對象序列時刻按照「升序」排列
相關實例請看:http://hi.bccn.net/space-447825-do-blog-id-16969.html
Comparable接口中定義的compareTo()方法,實現對總體排序所需的比較邏輯
排序稱爲天然排序,和天然比較
若是重寫了,compareTo()那麼要保證equals()保持一致
相關實例請查看:http://hi.bccn.net/space-447825-do-blog-id-16971.html
HashMap實現了Map接口 ,基於哈希表的實現了前述的映射集合結構
不保證其中元素的前後順序,而且容許null值和null鍵
當集合中不存在當前檢索的,get()返回的是空,而不會報錯
影響hashMap性能的兩個參數:初始容量和加載因子
相關實例請看:http://hi.bccn.net/space-447825-do-blog-id-16972.html
Hashtable也是採用鍵和值,鍵和值不容許爲null,
是同步的,即線程安全的,效率相對要低一些,用於多線程,用法與hashmap徹底同樣
Enumeration接口:做用與iterator接口相似,但只提供遍歷vector和hashtable(及子類properties)
且不支持集合元素的移除操做
些接口不是很經常使用,這裏就不給實例了
Collections定義了多種集合操做的方法,實現對集合元素排序,取極值,批是拷貝,集合結構
轉換,循環移位以及匹配檢查等功能
相關方法:
sort(List<T> list) 根據元素的天然順序 對指定列表按升序進行排序。
reverse(List<?> list) 反轉指定列表中元素的順序。
shuffle(List<?> list) 使用默認隨機源對指定列表進行置換。
copy(List<? super T> dest, List<? extends T> src) 將全部元素從一個列表複製到另外一個列表。
list(Enumeration<T> e) 返回一個數組列表,它按返回順序包含指定枚舉返回的元素
frequency(Collection<?> c, Object o) 返回指定 collection 中等於指定對象的元素數
max(Collection<? extends T> coll) 根據指定比較器產生的順序,返回給定 collection 的最大元素
rotate(List<?> list, int distance) 根據指定的距離輪換指定列表中的元素。
相關實例請查看:http://hi.bccn.net/space-447825-do-blog-id-16973.html
Arrays類定義了多種數組操做方法,實現了對數組元素
排序,填充,轉換爲列表或字符串形式、加強的檢索和深度比較等功能
asList()返回一個受指定數組支持的固定大小的列表
sort()對指定的 byte 型數組按數字升序進行排序
binarySearch(int[] a, int key) 使用二分搜索法來搜索指定的 int 型數組,以得到指定的值。
toString(Object[] a) 返回指定數組內容的字符串表示形式。