1. 程式人生 > >集合類淺談(1)

集合類淺談(1)

集合 的體系:
------------| 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,那麼該元素執行 添                                                                加。

------------------| 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)