List的子類

今天接著昨天的繼續學習List的子類

List的子類

常見的兩種子類

ArrayList集合

LinkedList集合

ArrayList集合

java.util.ArrayList 集合數據存儲的結構是數組結構。元素增刪慢,查找快,由於日常開發中使用最多的功能為查詢數據、遍歷數據,所以ArrayList 是最常用的集合。

許多程序員開發時非常隨意地使用ArrayList完成任何需求,並不嚴謹,這種用法是不提倡的

LinkedList集合

java.util.LinkedList 集合數據存儲的結構是鏈表結構。方便元素添加、刪除的集合。

List的子類

一些常見的方法

List的子類

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 方法。

可以嘗試一下這個程序的輸出結果是多少

List的子類

HashSet集合存儲數據的結構(哈希表)

什麼是哈希表呢?

在JDK1.8之前,哈希表底層採用數組+鏈表實現,即使用數組處理衝突,同一hash值的鏈表都存儲在一個數組裡。

但是當位於一個桶中的元素較多,即hash值相等的元素較多時,通過key值依次查找的效率較低。而JDK1.8中,哈希表存儲採用數組+鏈表+紅黑樹實現,當鏈表長度超過閾值(8)時,將鏈表轉換為紅黑樹,這樣大大減少了查找時間。

簡單的來說,哈希表是由數組+鏈表+紅黑樹(JDK1.8增加了紅黑樹部分)實現的,

List的子類

List的子類

總而言之,JDK1.8引入紅黑樹大程度優化了HashMap的性能,那麼對於我們來講保證HashSet集合元素的唯一,其實就是根據對象的hashCode和equals方法來決定的。如果我們往集合中存放自定義的對象,那麼保證其唯一,就必須複寫hashCode和equals方法建立屬於當前對象的比較方式。

HashSet存儲自定義類型元素

給HashSet中存放自定義類型元素時,需要重寫對象中的hashCode和equals方法,建立自己的比較方式,才能保證HashSet集合中的對象唯一.

LinkedHashSet

我們知道HashSet保證元素唯一,可是元素存放進去是沒有順序的,那麼我們要保證有序,怎麼辦呢?

在HashSet下面有一個子類java.util.LinkedHashSet ,它是鏈表和哈希表組合的一個數據存儲結構。

List的子類


分享到:


相關文章: