集合的效率問題

2021-08-27 15:54:55 字數 1280 閱讀 5936

linkedlist :假如想在乙個列表中部進行大量插入和刪除操作,那麼 linkedlist 無疑是最恰當的選擇 ;若非如此,就情願選擇 arraylist ,它的速度可能要快一些。

arrayset:寫乙個需要 set 的程式時,應預設選擇hashset 。而且只有在某些特殊情況下(對效能的提公升有迫切的需求),才應切換到arrayset 。

進行 add() 以及 contains() 操作時,hashset 顯然要比 arrayset 出色得多,而且效能明顯與元素的多寡關係不大。一般編寫程式的時候,幾乎永遠用不著使用 arrayset 。

arraylist :在 arraylist 中進行隨機訪問(即 get() )以及迴圈反覆是最划得來的;但對於 linkedlist 卻是乙個不小的開銷。但另一方面,在列表中部進行插入和刪除操作對於 linkedlist 來說卻比 arraylist 划算得多。我們最好的做法也許是先選擇乙個 arraylist 作為自己的預設起點。以後若發現由於大量的插入和刪除造成了效能的降低,再考慮換成 linkedlist 不遲。

即使大小為 10 ,arraymap 的效能也要比 hashmap 差——除反覆迴圈時以外。而在使用 map 時,反覆的作用通常並不重要(get() 通常是我們時間花得最多的地方)。treemap 提供了出色的 put() 以及反覆時間,但 get()的效能並不佳。但是,我們為什麼仍然需要使用 treemap 呢?這樣一來,我們可以不把它作為 map 使用,而作為建立順序列表的一種途徑。樹的本質在於它總是順序排列的,不必特別進行排序(它的排序方式馬上就要講到)。一旦填充了乙個 treemap ,就可以呼叫 keyset() 來獲得鍵的乙個 set 「景象」。然後用 toarray()產生包含了那些鍵的乙個陣列。隨後,可用 static 方法 array.binarysearch() 快速查詢排好序的陣列中的內容。當然,也許只有在 hashmap 的行為不可接受的時候,才需要採用這種做法。因為 hashmap 的設計宗旨就是進行快速的檢索操作。最後,當我們使用 map 時,首要的選擇應該是 hashmap 。只有在極少數情況下才需要考慮其他方法。

treemap 的建立速度比其他兩種型別明顯快得多(但你應親自嘗試一下,因為據說新版本可能會改善 arraymap 的效能)。考慮到這方面的原因,同時由於前述 treemap 出色的 pu t() 效能,所以如果需要建立大量 map ,而且只有在以後才需要涉及大量檢索操作,那麼最佳的策略就是:建立和填充treemap ;以後檢索量增大的時候,再將重要的 treemap 轉換成 hashmap ——使用 hashmap(map) 構建器。同樣地,只有在事實證明確實存在效能瓶頸後,才應關心這些方面的問題——先用起來,再根據需要加快速度。

關於集合List的常見操作效率問題

第二 list和arraylist和linkedlist和treeset和hashset之間使用效率問題 常見操作 1 新增 遍歷 列印結果 list新增用時 41 arraylist新增用時 6 linkedlist新增用時 4 list遍歷用時 14 arraylist遍歷用時 8 linked...

提高Request集合的效率

我們在運用request集合中的乙個值,應將其存貯為乙個區域性變數。這樣會加快乙個指令碼的執行速度,例如將 寫成下面的形式以加快指令碼引擎處理速度 strtitle request.form title strfirstname request.form first strlastname requ...

Dynamic cast的效率問題

dynamic cast的作用 在derived class身上執行derived class 執行函式,手頭只有指向base的pointer或reference.方案一 class window class specialwindow public window 什麼也不做 class speci...