元素之間是一維線性的關係,每一個元素只有一個下標,在排序場景下,每一個元素的數據類型是一致的。例如:算法
A:調用Array.Sort方法實現數組排序,不限制元素數據類型,底層基於對IComparable的接口實現編程
B:使用Linq實現排序數組
1000條數據(GUID)緩存 |
10000數據(GUID)安全 |
100000數據(GUID)數據結構 |
|
Array.Sort架構 |
2ms函數 |
35ms性能 |
420ms測試 |
Linq |
4ms |
74ms |
738ms |
能夠看出, Array.Sort排序優於Linq的性能(越底層的結構,排序的性能越好)。
數組能夠具備多個維度,支持多行多列,各個維度的數據類型能夠不一樣。
在此文中,交錯數組不在研究範圍內,主要研究的是不一樣數據類型的矩陣數組,這樣更加貼近咱們在實際場景中的數據。例如:
Step1:定義一個對象排序類ObjectComparer,實現IComparer接口,主要負責數組中某個列的排序,
若是要排序的列是int類型,進行以下比較便可:其餘類推。
ObjectComparer類結構:
Step2:定義維度順序整形數組:tagObjArray,實例化ObjectComparer對象,將要排序的數組做爲參數傳遞給ObjectComparer的構造函數。
Step3:調用Array.Sort方法排序,參數:維度順序整形數組:tagObjArray和ObjectComparer對象。
使用大小可按需動態增長的數組。
可經過索引訪問的對象的強類型列表。提供用於對列表進行搜索、排序和操做的方法,在決定使用 List 仍是使用 ArrayList 類(二者具備相似的功能)時, List 類在大多數狀況下執行得更好而且是類型安全的。例子中的Sort其實調用的是String.Sort方法。
ArrayList |
List |
|
100000 |
498 ms |
538ms |
從數據結構上來講都屬於Hashtable,對關鍵字(鍵值)進行散列操做,適合鍵值對的存取,排序可使用LINQ實現,建議使用SortedDictionary替換。
Dictionary和HashTable內部實現差很少,但前者無需裝箱拆箱操做,效率略高一點
Hashtable 主要用於鍵值快速查找,卻沒有提供排序的方法,因此它的排序須要借住數組或其它集合來實現。
HashTable中的key/value均爲object類型,由包含集合元素的存儲桶組成。存儲桶是 HashTable中各元素的虛擬子組,與大多數集合中進行的搜索和檢索相比,存儲桶可令搜索和檢索更爲便捷。每一存儲桶都與一個哈希代碼關聯,該哈希代碼是使用哈希函數生成的並基於該元素的鍵。HashTable的優勢就在於其索引的方式,速度很是快。若是以任意類型鍵值訪問其中元素會快於其餘集合,特別是當數據量特別大的時候,效率差異尤爲大。
HashTable的應用場合有:對象緩存,樹遞歸算法的替代,和各類需提高效率的場合。
Stack,棧,表示對象的簡單的後進先出非泛型集合。Push方法入棧,Pop方法出棧。
隊列,先進先出。enqueue方法入隊列,dequeue方法出隊列。
Step1:定義自定義類:Person
Step2:構造實體類集合:List<Person> persons
Step3:排序方法實現:
一、直接排序
二、Person實現IComparable接口,直接調用Sort方法排序
直接調用Sort方法排序
三、Linq實現排序
測試結果對比:
1.直接排序 |
2.實現IComparable接口 |
3.Linq |
|
100000 |
75ms |
99ms |
29ms |
(1)DataTable 對象是按條件區分大小寫的。(若是有兩個 DataTable對象分別爲「mydatatable」和「Mydatatable」,則搜索表的字符串被認爲是區分大小寫的。若是隻有「mydatatable」而不存在「Mydatatable」,則該搜索表的字符串不區分大小寫)。
(2)以編程方式建立 DataTable,須先經過將 DataColumn 對象添加到 DataColumnCollection(經過 Columns 屬性訪問)中來定義其架構。
(3)向 DataTable 添加行,須使用 NewRow 方法返回新的 DataRow 對象。(DataTable 可存儲的最大行數是 16,777,216)。
(4)DataTable 也包含可用於確保數據完整性的 Constraint 對象的集合
(5)DataTable 事件(RowChanged、RowChanging、RowDeleting 和 RowDeleted)可用於肯定對錶進行更改的時間
Step1: 構造DataTable
Step2:DataView排序
Step2:DataTable.Select排序
1.DataView排序 |
2.DataTable.Select排序 |
|
100000 |
526 ms |
368ms |
對比下自定義類存儲100000條相同數據的排序結果:
測試結果對比:
1.直接排序 |
2.實現IComparable接口 |
3.Linq |
|
100000 |
75ms |
99ms |
29ms |
一、 在數組排序中,建議使用Array.Sort 方式,優於LINQ方式
二、 在自定義類排序時,推薦使用LINQ方式
三、 DataTable和自定義類存儲同類型數據時,自定義類的排序總體優於DataTable方式。
四、 DataTable排序時,推薦使用DataTable.Select排序方式。
五、 Dictionary和HashTable內部實現差很少,但Dictionary無需裝箱拆箱操做,效率略高一點。數據量較大時,建議採用HashTable。
六、 ArrayList集合的排序性能優於List集合。
七、 Stack和Queue集合用於棧和隊列操做。