元素之间是一维线性的关系,每一个元素只有一个下标,在排序场景下,每一个元素的数据类型是一致的。例如:算法
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集合用于栈和队列操做。