許多集合類都提供了相同的功能,例如,sortedlist類和sorteddictionary類的功能幾乎完全相同。但是,其效能常常有很多大區別。乙個集合使用的記憶體少,另乙個集合的元素檢索速度快。在msdn文件中,集合的方法常常有效能提示,給出了以大寫o記號表示的操作事件:
o(1)表示無論集合中有多少資料項,這個操作需要的時間都不變。例如,arraylist類的add()方法就具有o(1)的行為。無論列表中有多少個元素,在列表的末尾新增乙個新元素的時間都相同。count屬性會給出元素個數,所有很容易找到列表末尾。
o(n)表示對集合執行乙個操作需要的時間在最壞情況時是n。如果需要重新給集合分配記憶體,arraylist類的add()方法就是乙個o(n)操作。改變容量,需要複製列表,複製的時間隨元素的增加而線性增加。
o(log n)表示操作需要的時間隨集合中元素的增加而增加,但每個元素需要增加的時間不是線性的,而是呈對數曲線。在集合中執行插入操作時,sortedictionary集合類具有o(log n)行為,而sortedlist集合類具有o(n)行為。這裡sorteddictionary集合類要快的多,因為它在樹形結構中插入元素的效率比列表高很多。
下表列出了集合類及其之執行不同操作的效能,例如,新增、插入和刪除元素。使用這個表可以選擇效能最佳的集合類。左列是集合類,add列出了在集合中新增元素所需的時間。list和hashset類把add方法定義為在集合中新增元素。其他集合類用不同的方法把元素新增到集合中。例如,stack類定義了push()方法,queue類定義了enqueue()方法。這些資訊也列在表中。
如果單元格中有多個大o值,表示若集合需要重置大小,該操作就需要一定的時間。例如,在list類中,新增元素的時間是o(1)。如果集合的容量不夠大,需要重置大小,則重置大小需要的時間長度就是o(n)。集合越大,重置大小操作的時間就越長。最好避免重置集合的大小,而應把集合的容量設定為乙個可以包含所有元素的值。
靜態集合與動態集合的不同
nodelist 有兩種,一種是動態集合,一種是靜態集合,所謂動態集合,主要是 node.prototype.childnodes 返回的子節點集合對文件的節點增刪改會即時改變 而靜態集合則不會,比如document.queryselectorall lang en charset utf 8 na...
不同集合之間的比較
1 list,set都是繼承自collection介面 2 list特點 元素有放入順序,元素可重複 set特點 元素無放入順序,元素不可重複,重複元素會覆蓋 map 沒有繼承 collection 介面,map 提供 key 到 value 的對映,你可以通過 鍵 查詢 值 乙個 map 中不能包...
關於集合的效能問題
1.bag 是所有非反向集合型別中效能最差的 但卻是反向集合中效能最好的,還有list。因為 bag 允許重複的元素值,也沒有索引字段,因此不可能定義主鍵。hibernate 無法判斷出重複的行。當這種集合被更改時,hibernate 將會先完整地移除 通過一 個 in a single delet...