容器使用筆記(擴充套件篇)

2021-07-04 04:50:13 字數 1916 閱讀 4512

前兩篇文章分別介紹了幾種容器,他們之間的區別與聯絡也做了簡單的介紹,這篇文章主要在儲存機制和工作效率上來擴充套件一下。

我們從資料的角度將它們分為兩類一維集合和二維集合(這裡不討論陣列),一維集合主要包括

arraylist

、list

,二維集合主要包括

hashtable

、dictionary

,其它型別(使用較少)不做討論。

首先說一維集合,**於陣列,他們在記憶體中的儲存機制也是**於陣列,以順序儲存的方式存放在記憶體中,以下標為索引查詢資料,效率較高。

再來談談二維表,

hashtable

和dictionary

,俗稱字典都是鍵值對的集合,可以說

dictionary

其實就是雜湊表的泛型版本。字典與一維集合的區別就是字典通過

key來查詢

value

,他的演算法複雜度為

o(1)

,而一維陣列通過下標索引查詢

value

,演算法複雜度也為

o(1)

,因而他們的儲存機制完全不同。

我們先來看一下

dictionary,

和hashtable

的差異。看以下兩段**:

可以看的出來,字典在輸出是完全是按照資料插入的順序輸出的,而雜湊表會在插入資料時打亂其儲存順序。

再來看看二維集合的儲存機制,在儲存二維集合時,計算機會根據二維集合的

key通過雜湊演算法計算出乙個虛擬位址,然後將資料儲存在相應位置。查詢資料時也一樣,需要根據

key通過雜湊演算法找到對應的虛擬位址,然後獲得資料。

它們的效率有多大的差距呢?下圖是乙個高手寫的程式的執行結果:

他們在遍歷整個集合時效率的差距是很大的。所以,順序表儲存結構在遍歷查詢資料時,有很大優勢。

下圖是幾種字典在儲存結構和效能上的差異總結:

type

內部結構

支援索引

記憶體占用

隨機插入的速度(毫秒)

順序插入的速度(毫秒)

根據鍵獲取元素的速度(毫秒)

未排序字典

dictionary

雜湊表 否

22 30

30 20

hashtable

雜湊表 否

38 50

50 30

listdictionary 鍊錶

否 36

50000

50000

50000

ordereddictionary

雜湊表+陣列 是

59 70

70 40

排序字典

sorteddictionary

紅黑樹 否

20130

100120

sortedlist

2xarray 是

203300 30

40sortlist

2xarray 是

274500

100180

Java 編輯器使用筆記

compositeruler ruler new compositeruler sourceviewer sv new sourceviewer composite,ruler,swt.border swt.h scroll swt.v scroll linenumberrulercolumn li...

LaTex 編輯器使用筆記

使用筆記參考檔案lshort zh cn.pdf 一篇latex文章包括了導言區和正文區兩大部分 導言區設定格式 正文部分套用格式 文章以 document 環境為界,在 document 環境前面的是導言區,環境內部的是正文區,環境之後的部分被忽略 一段簡單的latex檔案 導言區 documen...

oracle觸發器使用筆記

語法規則 create or replace trigger 模式.觸發器名 before after insert delete update of 列名 on 表名 for each row when 條件 pl sql塊 說明 for each row的意義是 在一次操作表的語句中,每操作成功...