集合:保存多個其他對象的對象,不能保存簡單類型
List:有序(存放元素的順序),可重複的集合
ArrayList:實質就是一個會自動增長的數組
查詢效率比較高,增刪的效率比較低,適用於查詢比較頻繁,增刪動作較少的元素管理的集合。
加載大批量的數據時,先進行手動擴容(就是調用ensureCapacity(int minCapacity)方法),這樣可以提高效率。
LinkedList:底層是用雙向循環鏈表來實現的
查詢效率低,但是增刪效率很高,適用於增刪動作的比較頻繁,查詢次數較少的元素管理的集合
Set:無序的,不允許有重複元素的集合
HashSet:
Object類中的hashCode()的方法是所有類都會繼承的方法,這個方法會算出一個Hash碼值返回,HashSet會用Hash碼值去和數組長度取模,對象的模值(這個模值就是對象要存放在數組中的位置,和數組的下標相同)相同時纔會判斷數組中的元素和要加入的對象的內容是否相同,如果不同纔會再找位置添加進去,相同則不允許添加。
如果數組中的元素和要加入的對象的hashCode()返回了相同的Hash碼值,纔會用equals()方法來判斷兩個對象的內容是否相同。
注意:要存入HashSet的集合對象中的自定義類必須覆蓋hashCode()、equals()兩個方法,才能保證集合中元素不重複。
TreeSet:可排序的Set
SortedSet接口是Set的子接口,TreeSet是SortedSet接口的實現類,他可以對集合中的元素進行排序。
將自定義類的對象存放在TreeSet中,這個類需要實現了Comparable接口,TreeSet可以自動過濾掉重複元素所以不在需要重載hashCode()方法,TreeSet會根據比較規則判斷元素內容是否相同,不同則會存入,TreeSet會在元素存入時就進行排序。
Comparable接口:
也叫做可比較接口,這個接口在java.lang包下,只要根據指定類型的排序規則實現了這個接口,就是可排序的。
這個接口中只定義了一個 compareTo(Object o) 方法,該方法的返回值類型是整型,如果當前對象大於參數對象就返回正數,當前對象等於參數對象就返回0,當前對象小於參數對象就返回負值,這樣寫就是升序排列,反之則是進行降序排列。
Comparator接口:
比較器Comparator接口,是另一種對自定義類型對象的集合整體排序的方法,存在於java.util包下。
這個接口中定義了一個 compare(Object o1,Object o2) 方法來比較兩個對象,這個方法的返回值定義和上面介紹的那個方法是一樣。
利用這種方式,則在創建集合的時候把定義好的比較器作爲參數,構造一個集合
Map:存放key-value對(有關係的兩個對象,一個做key,一個做value,同時存入)
HashMap:基於哈希表的 Map 接口的實現,此實現提供所有可選的映射操作,並允許使用 null 值和 null 鍵
遍歷:
先調用keySet()得到key的set集合,
再迭代遍歷key的set集合,
根據key得到value。
Hashtable:同HashMap,一般不使用
HashMap與Hashtable的區別:
HashMap:非線程安全,不支持併發控制,允許空的鍵值對。
Hashtable:是線程安全,支持併發控制,不允許有空的鍵值對。
SortedMap接口:Map的子接口,按某一特定排序規則來存放所加入的鍵值對
實現類:TreeMap類。
Key值的排序規則,同SortedSet接口實現類TreeSet
注意:
key一般是8種基本類型的封裝類或者是String類,拿自己自定義的類作爲Key沒有意義。
key不可重複,value可以重複