數據結構圖
集合類圖
.容器中裝的都是對象,因為它要把對象放到堆上面,但是1.5后就可以自動包裝
map.put("one",new Integer(1))
1.5后可以 map.put("one",1);
List
有序的、可重復的、按索引位置排序 (這點類似於數組)
實現類
ArrayList 數組實現
1. 代表長度可變的數組
2. 允許對元素進行快速的隨機訪問(根據索引進行訪問)
3. 向ArrayList中插入和刪除元素的速度較慢,需要移動大量的元素
LinkedList 雙向鏈表實現
1. 插入和刪除元素的速度較快(不需要移動元素)
2. 隨機訪問的速度相對較慢,隨機訪問的含義是根據索引定位特定位置的元素
3. 提供addFirst(0 addLast() getFirst() get拉斯特() removeFirst()和removeLast()方法,使LinkedList可以作為堆棧,隊列和雙向隊列使用
Set
無序的、不可重復的、
實現類
HashSet 哈希算法實現、底層是HashMap實現,用到了key的部分。
1. 按照哈希算法存取集合中的對象,具有很好的存取和查找性能
2. 當向集合中加入一個對象時,Hashset會調用對象的hashCode()方法獲得哈希碼,然后根據哈希碼進一步計算對象在集合中的存放位置
3. 在Java.lang.Object中定義了hashCode()和equals()方法,在最原始的Object中定義的equals()方法是按照內存地址比較對象是否相等,因此對於Object而言,如果equals方法的結果為true,則說明兩個引用實際上引用相同的對象,這兩個引用的哈希碼必然也相同
為保證HashSet能夠正常工作,要求兩個對象用equals()方法比較的結果為true時,他們的哈希碼也相同
如果用戶定義的類覆蓋了Object的equals方法而沒有覆蓋hashCode方法,會導致當equals方法結果為true時,對象的哈希碼並不相同,這樣會使hashSet無法正常工作,用戶本意是作為同一個對象引用處理,但是由於沒有覆蓋hashCode()方法,導致哈希碼不同,hashSet將作為不同對象處理。
SortedSet
排序的set
實現類
TreeSet,在HashSet的基礎上維護了一個雙向鏈表,
1. 排序的依據對象實現實現了Comparable接口,或者是構造時傳入Comparator比較器。像Integer,Double和String他們自己都實現了Compareble接口
Map
Key 唯一的,key不可重復的。Value可重復。
實現類
HashMap
SortedMap
TreeSet基於TreeMap實現,支持排序
TreeSet是非線程安全的