List vector set map的區別與聯絡

2021-06-07 03:22:41 字數 1939 閱讀 9547

collection<--

list

<--

vector

collection<--

list

<--arraylist

collection<--

list

<--linkedlist

collection<--

set<--hashset

collection<--

set<--hashset<--linkedhashset

collection<--

set<--sortedset<--treeset

vector

: 基於array的

list

,其實就是封裝了array所不具備的一些功能方便我們使用,它不可能走入array的限制。效能也就不可能超越array。所以,在可能的情況下,我們要多運用array。另外很重要的一點就是

vector

「sychronized」的,這個也是

vector

和arraylist的唯一的區別。

arraylist:同

vector

一樣是乙個基於array上的鍊錶,但是不同的是arraylist不是同步的。所以在效能上要比

vector

優越一些,但是當執行到多執行緒環境中時,可需要自己在管理執行緒的同步問題。

linkedlist:linkedlist不同於前面兩種

list

,它不是基於array的,所以不受array效能的限制。它每乙個節點(node)都包含兩方面的內容:1.節點本身的資料(data);2.下乙個節點的資訊(nextnode)。所以當對linkedlist做新增,刪除動作的時候就不用像基於array的

list

一樣,必須進行大量的資料移動。只要更改nextnode的相關資訊就可以實現了。這就是linkedlist的優勢。

list

總結:1. 所有的

list

中只能容納單個不同型別的物件組成的表,而不是key-value鍵值對。例如:[ tom,1,c ];

2. 所有的

list

中可以有相同的元素,例如

vector

中可以有 [ tom,koo,too,koo ];

3. 所有的

list

中可以有null元素,例如[ tom,null,1 ];

4. 基於array的

list

(vector

,arraylist)適合查詢,而linkedlist(鍊錶)適合新增,刪除操作。

hashset:雖然

set同

list

都實現了collection介面,但是他們的實現方式卻大不一樣。

list

基本上都是以array為基礎。但是

set則是在hashmap的基礎上來實現的,這個就是

set和

list

的根本區別。hashset的儲存方式是把hashmap中的key作為

set的對應儲存項。看看hashset的add(object   obj)方法的實現就可以一目了然了。

public boolean add(object obj)

這個也是為什麼在

set中不能像在

list

中一樣有重複的項的根本原因,因為hashmap的key是不能有重複的。

linkedhashset:hashset的乙個子類,乙個鍊錶。

treeset:sortedset的子類,它不同於hashset的根本就是treeset是有序的。它是通過sortedmap來實現的。

set總結:

1. set

實現的基礎是map(hashmap);

2.  

set中的元素是不能重複的,如果使用add(object obj)方法新增已經存在的物件,則會覆蓋前面的物件;

TCP IP, HTTP,SOCKET的區別與聯絡

網路由下向上可分為 物理層,資料鏈路層,網路層,傳輸層,會話層,表示層和應用層。通過初步的了解,我知道ip協議對應網路層,tcp協議對應傳輸層,而http協議對應於應用層。三者從本質上來說沒有可比性。socket從程式設計師層面上就是對tcp ip協議的封裝和使用。也可以說tcp ip協議是傳輸層協...

mtine,ctime,atime的區別與聯絡

access time.modify time.change time分別代表什麼意義 linux系統中有三個主要的時間屬性,分別是ctime change time atime access time mtime modify time 他們具體有何意義?他們之間有何聯絡與區別呢?下面我來介紹一下...

tensorflow 高階API的區別與聯絡

tf.keras.layers和tf.layers有什麼區別?問問題投票2投票 最喜歡1 tf.keras.layers和tf.layers有什麼區別?例如,他們都有conv2d,他們提供不同的輸出嗎?如果你把它們混合起來有什麼好處 比如tf.keras.layers.conv2d在乙個隱藏層和下乙...