CS Notes打卡第九天 Vector

2021-10-05 21:51:38 字數 2143 閱讀 1559

vector集合與arraylist相似,但是vector是執行緒安全的。

vector集合使用synchronized關鍵字進行同步,達到執行緒安全,例如add,remove方法

public

synchronized

boolean

add(e e)

public

synchronized

void

addelement

(e obj)

public

synchronized

boolean

removeelement

(object obj)

return

false

;}

在進行add操作的時候,如果達到當前陣列大小,需要進行擴容操作,在進行擴容操作的時候跟arraylist差不多,但是vector集合是判斷(mincapactity-oldcapacity)和(capacityincrement或oldcapacity)進行大小比較,而arraylist後者是oldcapacity/2

private

void

add(e e, object[

] elementdata,

int s)

private object[

]grow

(int mincapacity)

capacityincrement可以通過建構函式賦值

capacityincrement本身是沒有賦值預設為0,在建構函式的時候可以為它賦值

public

vector

(int initialcapacity,

int capacityincrement)

而預設的無參建構函式會呼叫乙個引數的建構函式,然後乙個引數的構造函式呼叫上面的建構函式(套娃無窮盡也)

public

vector()

public

vector

(int initialcapacity)

1.vector通過synchronized關鍵字進行同步,屬於執行緒安全,而arraylist非執行緒安全,因此vector的開銷也比arraylist大。

2.vector擴容首先判斷是否存在capacityincrement,不存在就用最小增長跟oldcapacity進行對比,而arraylist是最小增長跟oldcapacity/2進行對比。

1.可以使用 collections.synchronizedlist()(也是獲得乙個通過synchronized關鍵字同步的list)獲取乙個執行緒安全的list

2.使用concurrent並發包下面的copyonwritearraylist類

在進行寫操作的時候是先copy乙個陣列然後在新陣列上面進行修改,然後替換原陣列

public

boolean

add(e e)

}

讀在原陣列上面直接操作

@suppresswarnings

("unchecked"

)static

e elementat

(object[

] a,

int index)

優點copyonwritearraylist在寫的同時支援讀的操作,大大提公升了讀的效能,適用於讀多寫少的場景。

但是優點又是缺點:

1.記憶體占用大:讀寫分離,每次都要拷貝乙個新的陣列,因此記憶體占用大

2.資料不一致:在讀的時候不能夠實時的讀取別人正在寫的資料,因為部分的寫操作的資料還未同步到記憶體中

小結:copyonwritearraylist適用於讀多寫少,同時記憶體不敏感,以及實時性要求低的場景。

總結:vector與arraylist十分相似,但是vector是執行緒安全的,與arraylist擴容時,選擇的擴容大小也不一樣。vector可以用collections.synchronizedlist()或者使用concurrent包中的copyonwritearraylist替代(適合場景比較少)

ps:最近要找房子好累啊

第九天 補打卡

這個題目和前面那個有點像,所以我還是用前面那種方式解決問題,遍歷,將不等於給定值的交換,如下 class solution object def removeelement self,nums,val if len nums 0 return 0 is tihan 0 for i in range ...

集訓第九天

今天就看了乙個迪傑斯特拉演算法,他的方法就是從乙個頂點出發,找出這個到與它相關頂點的所有路徑,然後在找出其中最小的,作為基量,一次類推 如下 include define inf 0x7fffffff define maxn 50 int matrix maxn maxn void dijkstra...

開課第九天

畫布 1今天是開課第九天,上午講了關於方法的題,下午講了新知識,嗯,今天有點熱,下面就是本寶寶今天的收穫 1 過載 方法名相同,引數列表不同叫做過載,和返回值型別無關。過載方法名必須一致,引數列表不同,和返回值型別無關。引數列表不同 個數不同,順序不同,型別不同 方法過載的時候編譯器會自動找到最適合...