自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

List有序,Set無序,真的是這樣嘛?

開發(fā) 前端
今天說一說集合,在面試的時(shí)候出現(xiàn)的頻率非常高,開發(fā)中使用的頻率也非常高。經(jīng)常聽到有人說List是有序,Set是無序,那么這個(gè)有序和無序指的究竟是什么呢?

 [[283143]]

今天說一說集合,在面試的時(shí)候出現(xiàn)的頻率非常高,開發(fā)中使用的頻率也非常高。經(jīng)常聽到有人說List是有序,Set是無序,那么這個(gè)有序和無序指的究竟是什么呢?

 

List有序,Set無序,真的是這樣嘛?

 

這里有兩個(gè)概念,一個(gè)是存取元素的順序,比如我存的時(shí)候是3 4 5 1 2 ,那么取出來也應(yīng)該是3 4 5 1 2 或者 2 1 5 4 3 。另一個(gè)是元素在容器中大小順序,更準(zhǔn)確說是排序。如果說區(qū)分了這兩個(gè)概念,就好說了,看上面的體系圖,List家族有兩名大將,分別是ArrayList和LinkedList。而Set家族里主要有HashSet和TreeSet兩名大將。

如果要按照存和取的順序來講,ArrayList和LinkedList就屬于有序集合,因?yàn)锳rrayList底層是動(dòng)態(tài)數(shù)組實(shí)現(xiàn)的,而數(shù)組是一塊連續(xù)的空間,每次存的時(shí)候都是找到索引,一個(gè)接著一個(gè)的存儲(chǔ),取的時(shí)候也要按照索引遍歷出來。

 

List有序,Set無序,真的是這樣嘛?

 

鏈表也是一樣,不是存到鏈表頭就是存到鏈表尾。因?yàn)榇婧腿〉捻樞蛴行?,模擬棧(先進(jìn)后出)和隊(duì)列(先進(jìn)先出)這兩種數(shù)據(jù)結(jié)構(gòu)也很容易。但這兩種結(jié)構(gòu)它們本身并不能對(duì)元素進(jìn)行排序,這也決定了我不能輕易的找到數(shù)組或鏈表中的最大值和最小值,或者說元素和元素之間存儲(chǔ)的并沒有什么規(guī)律。

 

List有序,Set無序,真的是這樣嘛?

 

同樣,按照存儲(chǔ)順序來講,HashSet依賴哈希存儲(chǔ),計(jì)算哈希值之后,會(huì)分散到不同的存儲(chǔ)位置上,這也就代表存儲(chǔ)的時(shí)候,元素不是一個(gè)挨著一個(gè)存儲(chǔ)的,而是根據(jù)每個(gè)元素的hash值,散列到了不同的位置。存取的順序也是不能保證的,元素的排序順序也是不能保證的,但好處就是存取效率高。

 

List有序,Set無序,真的是這樣嘛?

 

而TreeSet依賴的是樹存儲(chǔ),在樹這種結(jié)構(gòu)中,無論是二分查找樹,還是紅黑樹,在存儲(chǔ)元素的時(shí)候都會(huì)對(duì)元素本身進(jìn)行比較,按照大小放到合適的位置,這也就說明,元素會(huì)按照樹的性質(zhì)去存儲(chǔ),那么也就無法保證存和取元素的順序。但是元素可以在存儲(chǔ)的時(shí)候根據(jù)自身的大小排好序,從而可以很輕易的找到最大值,最小值,以及給定一個(gè)元素,找到比他大和比他小元素等操作。

 

List有序,Set無序,真的是這樣嘛?

 

總結(jié):按元素存取順序來說,List是有序的,Set是無序的。按照元素和元素之間的關(guān)系來說,List是無序的,TreeSet是有序的。而HashSet怎么說都是無序的。

責(zé)任編輯:武曉燕 來源: 今日頭條
相關(guān)推薦

2024-01-31 16:46:24

SQL數(shù)據(jù)庫

2015-08-27 09:21:20

程序員青春飯

2016-03-15 09:53:43

5GHz5G

2024-04-19 13:02:27

容器C++

2024-11-08 17:15:49

2020-02-20 10:45:57

代碼JS開發(fā)

2021-01-29 10:23:45

無序數(shù)組元素

2020-12-24 06:00:27

Python編程語言開發(fā)

2020-04-16 11:17:28

MacOSWindows安全

2022-04-29 14:08:50

技術(shù)人工智能

2018-08-22 13:11:35

中數(shù)經(jīng)緯輿情監(jiān)測(cè)中央廚房

2022-05-13 09:05:37

JSObject無序

2018-09-29 15:34:34

JavaList接口

2015-05-20 14:01:27

程序程序會(huì)做飯

2019-11-11 14:55:25

Redis數(shù)據(jù)類型命令

2024-07-26 15:58:55

2016-09-23 18:40:42

微軟開源代碼開源社區(qū)

2020-04-03 21:36:54

數(shù)據(jù)科技

2023-12-01 11:13:50

JavaTreeSet

2022-05-09 08:37:43

IO模型Java
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)