數組的長度是固定,集合的長度是能夠動態改變的java
沒法預測存儲數據的數量數組
存儲具備一對一關係的數據code
數據的增刪對象
數據重複問題,用set集合解決blog
集合只能使用引用數據類型,雖然數字能傳進去,實際上是java內部的一個自動裝箱的操做(如int型轉成了Integer型)排序
ArrayList底層是數組實現的,因此是連續存儲,查詢快接口
LinkedList底層是雙向鏈表實現的,增長和刪除快,查詢快rem
HashSet是哈希表實現的,是無序的,他元素能夠是null,但只能有一個nullget
TreeSet是基於二叉樹實現的,能夠自動排序,不容許放nullhash
HashMap適用於在Map插入、刪除和定位元素
TreeMap適用於按天然順序對鍵值對進行遍歷
無參構造是默認初始化容量10
數組實現,有序可重複
可動態增加
元素可有null
元素無需且不可重複
只容許一個null元素
set集合在讀取數據的時候不容許刪除操做
set.remove(collection c)支持從set中刪除c這樣的子集
//刪除年齡大於5個月的並從新輸出 Set<Cat> newSet= new HashSet<Cat>(); for (Cat c:set) { if (c.getMonth()>10) newSet.add(c); } set.removeAll(newSet);
當添加一個數據的時候,會調用hashCode()方法,獲得hash code值,經過這個值能夠找到數據的存儲位置(不是單個位置,是一片區域,該區域的hash code值是相等的),當能找到這個位置時,在用equals比較數據是否相等,相等就重複了,不相等就進行存儲
若是兩個對象相等,那麼它hashCode值必定相等,反之則不必定,還須要equals比較
Map的數據是以鍵值對(k-v)形式存儲的
k-v以Entry類型的對象實例存在
可用經過key快速查找到value的值
一個映射不能包含重複的鍵,k不能重複,v能夠重複
每一個鍵最多隻能映射到一個值
基於哈希表的Map接口實現
容許使用null鍵和null值,但null鍵只能有一個
key值不容許重複
HashMap的Entry對象是無序排列的