今天接著昨天的繼續學習List的子類
常見的兩種子類
ArrayList集合
LinkedList集合
ArrayList集合
java.util.ArrayList 集合數據存儲的結構是數組結構。元素增刪慢,查找快,由於日常開發中使用最多的功能為查詢數據、遍歷數據,所以ArrayList 是最常用的集合。
許多程序員開發時非常隨意地使用ArrayList完成任何需求,並不嚴謹,這種用法是不提倡的
LinkedList集合
java.util.LinkedList 集合數據存儲的結構是鏈表結構。方便元素添加、刪除的集合。
一些常見的方法
LinkedList是List的子類,List中的方法LinkedList都是可以使用,這裡就不做詳細介紹,我們只需要瞭解LinkedList的特有方法即可。在開發時,LinkedList集合也可以作為堆棧,隊列的結構使用。
Set接口
java.util.Set 接口和java.util.List 接口一樣,同樣繼承自Collection 接口,它與Collection 接口中的方法基本一致,並沒有對Collection 接口進行功能上的擴充,只是比Collection 接口更加嚴格了。與List 接口不同的是, Set 接口中元素無序,並且都會以某種規則保證存入的元素不出現重複。
Set 集合有多個子類,這裡我們介紹其中的java.util.HashSet 、java.util.LinkedHashSet 這兩個集合。
Set集合取出元素的方式可以採用:迭代器、增強for。
HashSet集合介紹
java.util.HashSet 是Set 接口的一個實現類,它所存儲的元素是不可重複的,並且元素都是無序的(即存取順序不能保證不一致)。
HashSet 是根據對象的哈希值來確定元素在集合中的存儲位置,因此具有良好的存儲和查找性能。保證元素唯一性的方式依賴於: hashCode 與equals 方法。
可以嘗試一下這個程序的輸出結果是多少
HashSet集合存儲數據的結構(哈希表)
什麼是哈希表呢?
在JDK1.8之前,哈希表底層採用數組+鏈表實現,即使用數組處理衝突,同一hash值的鏈表都存儲在一個數組裡。
但是當位於一個桶中的元素較多,即hash值相等的元素較多時,通過key值依次查找的效率較低。而JDK1.8中,哈希表存儲採用數組+鏈表+紅黑樹實現,當鏈表長度超過閾值(8)時,將鏈表轉換為紅黑樹,這樣大大減少了查找時間。
簡單的來說,哈希表是由數組+鏈表+紅黑樹(JDK1.8增加了紅黑樹部分)實現的,
總而言之,JDK1.8引入紅黑樹大程度優化了HashMap的性能,那麼對於我們來講保證HashSet集合元素的唯一,其實就是根據對象的hashCode和equals方法來決定的。如果我們往集合中存放自定義的對象,那麼保證其唯一,就必須複寫hashCode和equals方法建立屬於當前對象的比較方式。
HashSet存儲自定義類型元素
給HashSet中存放自定義類型元素時,需要重寫對象中的hashCode和equals方法,建立自己的比較方式,才能保證HashSet集合中的對象唯一.
LinkedHashSet
我們知道HashSet保證元素唯一,可是元素存放進去是沒有順序的,那麼我們要保證有序,怎麼辦呢?
在HashSet下面有一個子類java.util.LinkedHashSet ,它是鏈表和哈希表組合的一個數據存儲結構。
閱讀更多 學習編程 的文章