集合類淺談(1)
阿新 • • 發佈:2018-11-11
集合 的體系:
------------| Collection 單例集合的根介面
----------------| List 如果是實現了List介面的集合類,具備的特點: 有序,可重複。
-------------------| ArrayList ArrayList 底層是維護了一個Object陣列實現的。 特點: 查詢速度快,增刪慢。
-------------------| LinkedList LinkedList 底層是使用了連結串列資料結構實現的, 特點: 查詢速度慢,增刪快。
-------------------| Vector (瞭解即可) 底層也是維護了一個Object的陣列實現的,實現與ArrayList是一樣的,但是Vector是執行緒安全的,操作效率低。
----------------| Set 如果是實現了Set介面的集合類,具備的特點: 無序,不可重複。
-------------------| HashSet 底層是使用了雜湊表來支援的,特點: 存取速度快.
HashSet 的實現原理:
往HashSet 新增元素的時候,HashSet會先呼叫元素的hashCode方法得到元素的雜湊值 ,
然後通過元素 的雜湊值經過移位等運算,就可以算出該元素在雜湊表中 的儲存位置。
情況1: 如果算出元素儲存的位置目前沒有任何元素儲存,那麼該元素可以直接儲存到該位置上。
情況2: 如果算出該元素的儲存位置目前已經存在有其他的元素了,那麼會呼叫該元素的equals方法與該位置的元素再比較一次
,如果equals返回的是true,那麼該元素與這個位置上的元素就視為重複元素,不允許新增,如果equals方法返回的是false,那麼該元素執行 添 加。
------------| Collection 單例集合的根介面
----------------| List 如果是實現了List介面的集合類,具備的特點: 有序,可重複。
-------------------| ArrayList ArrayList 底層是維護了一個Object陣列實現的。 特點: 查詢速度快,增刪慢。
-------------------| LinkedList LinkedList 底層是使用了連結串列資料結構實現的, 特點: 查詢速度慢,增刪快。
-------------------| Vector
----------------| Set 如果是實現了Set介面的集合類,具備的特點: 無序,不可重複。
-------------------| HashSet 底層是使用了雜湊表來支援的,特點: 存取速度快.
HashSet 的實現原理:
然後通過元素 的雜湊值經過移位等運算,就可以算出該元素在雜湊表中 的儲存位置。
情況1: 如果算出元素儲存的位置目前沒有任何元素儲存,那麼該元素可以直接儲存到該位置上。
情況2: 如果算出該元素的儲存位置目前已經存在有其他的元素了,那麼會呼叫該元素的equals方法與該位置的元素再比較一次
,如果equals返回的是true,那麼該元素與這個位置上的元素就視為重複元素,不允許新增,如果equals方法返回的是false,那麼該元素執行 添 加。
------------------| TreeSet 如果元素具備自然順序 的特性,那麼就按照元素自然順序的特性進行排序儲存。
TreeSet 要注意的事項:
1. 往TreeSet新增元素的時候,如果元素本身具備了自然順序的特性,那麼就按照元素自然順序的特性進行排序儲存。
2. 往TreeSet新增元素的時候,如果元素本身不具備自然順序的特性,那麼該元素所屬的類必須要實現Comparable介面,把元素
的比較規則定義在compareTo(T o)方法上。
3. 如果比較元素的時候,compareTo方法返回 的是0,那麼該元素就被視為重複元素,不允許新增.(注意:TreeSet與HashCode、equals方法是沒有任何關係。)
4. 往TreeSet新增元素的時候, 如果元素本身沒有具備自然順序 的特性,而元素所屬的類也沒有實現Comparable介面,那麼必須要在建立TreeSet的時候傳入一個
比較器。
5. 往TreeSet新增元素的時候,如果元素本身不具備自然順序的特性,而元素所屬的類已經實現了Comparable介面, 在建立TreeSet物件的時候也傳入了比較器
那麼是以比較器的比較規則優先使用。
如何自定義定義比較器: 自定義一個類實現Comparator介面即可,把元素與元素之間的比較規則定義在compare方法內即可。
自定義比較器的格式 :
class 類名 implements Comparator{
}
推薦使用:使用比較器(Comparator)