1.List接口java
1.1API總結算法
(1)是一個元素存取有序的集合數組
(2)是一個帶有索引的集合,經過索引能夠精確的操做集合中的元素併發
(3)集合中有能夠重複的元素,經過元素的equals方法,來比較是否爲重複的元素spa
(4)List接口的經常使用子類:ArrayList集合、LinkedList集合對象
1.2List接口中經常使用的方法索引
(1)add(Object e):向集合末尾處添加指定的元素接口
(2)add(int index,Object e):向集合指定索引處,添加指定的元素,原有元素依次後移隊列
(3)remove(Object e):將指定元素對象,從集合中刪除,返回值爲被刪除的元素rem
(4)remove(int index):將指定索引處的元素,從集合中刪除,返回值爲被刪除的元素
(5)set(int index,Object e):將指定索引處的元素,替換成指定的元素,返回值爲替換前的元素
(6)get(int index):獲取指定索引處的元素,並返回該元素
1.3List集合3中遍歷方式
(1)迭代器Iterator
(2)for循環
(3)增強for循環
1.4 Iterator的併發修改異常
(1)產生緣由:在迭代過程當中,使用了集合的方法對元素進行操做。致使迭代器不知道集合中的變化,易引起數據的不肯定性
(2)錯誤報告:java.util.ConcurrentModificationException
(3)解決辦法:在迭代過程當中,不使用集合的方法操做元素,經過ListIterator迭代器操做元素
1.5List結合存儲數據的結構
(1)堆棧-先進後出,棧的入口、出口都是棧的頂端位置
(2)隊列-先進先出,隊列的入口、出口各佔一側
(3)數組-查找元素快:經過索引,能夠快速訪問指定位置的元素
增刪元素慢
(4)鏈表-多個節點之間,經過地址進行鏈接
查找元素慢,增刪元素快
1.6ArrayList集合-數據存儲的結構是數組結構,元素增刪慢,查找快
1.7LinkedList集合-數據存儲的結構是鏈表結構,方便元素添加、刪除的集合,LinkedList提供了大量首尾操做的方法
1.8Vector集合-數據存儲的結構是數組結構,爲JDK中最先提供的集合。Vector集合已被ArrayList替代
2.Set接口
2.1Set接口
(1)Set接口的集合中所存儲的元素是不重複的,是一個無序的集合
(2)經過元素的equals方法,來判斷是否爲重複元素
2.2HashSet集合-此類實現Set接口,由哈希表支持。HashSet集合不能保證迭代順序和元素存儲順序相同
(1)數據存儲方法
採用哈希表結構存儲數據,保證元素惟一性的方法依賴於:hashCode()與equals()方法
(2)哈希表
將對象存放到數組中時,根據這些對象的特有數據結合相應的算法(hashCode方法),計算出這個對象在數組中的位置,而後將對象存放到數組中。
(3)hashCode方法
當向哈希表存放元素時,須要根據元素的特有數據結合相應的算法
(4)HashSet存儲Java API中的類型元素
給HashSet中存儲JAvaAPI中提供的類型元素時,不須要重寫元素的hashCode和equals方法,由於這兩個方法已經在Java中重寫完畢,如String類、Integer類
給HashSet中存放自定義類型元素時,須要重寫對象中的hashCode和equals方法,創建本身的比較方式,才能保證HashSet集合中的對象惟一
2.3LinkedHashSet
HashSet子類,是鏈表和哈希表組合的一個數據存儲結構。保證元素的存入和取出的順序
3.判斷集合元素惟一的原理
3.1ArrayList的contains方法
(1)Boolean contains(Object o) 若是此列表中包含指定的元素,則返回true
(2)經過傳入的元素的equals方法依次與集合中的舊元素比較,根據返回值判斷
自定義類型在未重寫equals方法前,判斷的依據是地址,想根據內容判斷須要重寫元素的equals方法
3.2HashSet的add/contains等方法
(1)boolean add(E e) 若是此set中還沒有包含指定元素,則添加指定元素
set集合中不能存放重複元素,在添加過程當中進行判斷,有則不添加,不然添加
(2)boolean contains(Object o) 若是此set包含指定元素,則返回true
HashSet集合因爲是無序的,其判斷惟一的依據是元素類型的hashCode和equals方法
先判斷新元素與集合內已有的舊元素的hashCode值,不一樣添加,相同再判斷equals比較結果,不一樣添加。若是存儲自定義類型,須要重寫元素類的兩方法。