Collection中的List介面和Set介面

2021-09-25 04:47:03 字數 1912 閱讀 8185

list和set的區別:

list存放有序的,可重複的元素。list中元素的存放順序是按元素的插入時間一次往後排列來的。

set存放無序的,不可重複的元素(前提是如果新增的元素是早定義的類的話那必須得重寫hashcode()和equals()方法)。set中元素的存放順序與元素的插入時間無關,是根據元素的hashcode值來排列的。如果hashcode值一樣,則判斷值是否相等,相等則不存,不相等則存進來。

如果不重寫hashcode()和equals(),那會出現相同的元素可能都會存進來,例:

如果重寫hashcode()和equals(),那就不會出現相同的元素存進來,例:

arraylist和linklist的區別:

arraylist的記憶體結構是陣列,這個陣列的初始是10位的,插入的時候如果超過10位就將位數擴大到原來的2.5倍,依次類推。如果是add()的話會插入到最後一位,效率還是挺高的,但是如果這種add(i,b)方式將元素插入到特定的位置,那這個位置之後的元素將都會重新排序,效率低下。同樣刪除其中某乙個元素時候,刪除元素後面的元素也需要重新分組,效率低下。但是查詢效率高,直接通過下角標找到對應的值即可。

linkedlist使用了迴圈雙向鍊錶資料結構,linkedlist鍊錶由一系列表項連線而成,如圖:

對於linkedlist而言,在插入元素到任何位置,以及刪除都是一樣的,只需要把這個元素已經這個元素的連線刪除掉就可以。但是查詢效率低,因為每次取乙個值的時候會先判斷這個值在前一半還是後一半,每次取值都會將這個值前面的所有值都查一遍。

總結:

arraylist

優點: 底層資料結構是陣列,查詢快,增刪慢。

缺點: 執行緒不安全,效率高

vector

優點: 底層資料結構是陣列,查詢快,增刪慢。

缺點: 執行緒安全,效率低

linkedlist

優點: 底層資料結構是鍊錶,查詢慢,增刪快。

缺點: 執行緒不安全,效率高

hashset與linkedhashset區別:

hashset是按傳入值的hashcode值由大到小的順序去遍歷的,與增加的順序無關。

linkedhashset遍歷的時候雖然是按增加的順序依次遍歷的,但是它儲存的時候依然是按hashcode值去儲存的。

總結:

hashset

底層資料結構是雜湊表。(無序,唯一)

如何來保證元素唯一性?

1.依賴兩個方法:hashcode()和equals()

linkedhashset

底層資料結構是鍊錶和雜湊表。(fifo插入有序,唯一)

1.由鍊錶保證元素有序

2.由雜湊表保證元素唯一

treeset

底層資料結構是紅黑樹。(唯一,有序)

1. 如何保證元素排序的呢?

自然排序

比較器排序

2.如何保證元素唯一性的呢?

根據比較的返回值是否是0來決定

Collection中的排序

我們來了解一下collection的框架與介面 set介面下面已經有sortedset介面,其中提供了很多自帶排序的實現類,例如threeset,使用者還能夠自定義比較器來規定自己的排序規則。本篇著重說list介面下的排序,list的排序主要通過服務於collection框架的工具類collecti...

java中的集合Collection

集合的特點 用於儲存物件的容器 儲存物件的引用 集合的長度是可變的,集合中不可以儲存基本資料型別值 person p new person arraylist a new arraylist al.add p 不表示將p這個物件放進了al這個容器裡了 表示了將p這個物件的位址放進al容器裡使al容器...

Python中Collection的使用小技巧

1.判斷乙個 list 是否為空 傳統的方式 if len mylist do something with my list else the list is empty 由於乙個空 list 本身等同於 false,所以可以直接 if mylist do something with my lis...