首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

.NET数据结构:ArrayList,List,HashTable,Dictionary,SortedList,SortedDictionary - 速度,内存以及何时使用?

在这个问题中,您提到了几种常见的 .NET 数据结构,包括 ArrayList、List、HashTable、Dictionary、SortedList 和 SortedDictionary。您想了解这些数据结构之间的速度、内存以及何时使用它们的比较。

以下是这些数据结构的简要概述、速度、内存和使用场景:

  1. ArrayList:
    • 速度:较慢,因为它是一个同步的数组,并发访问效率较低。
    • 内存:较高,因为它是一个动态数组,可能会导致内存浪费。
    • 使用场景:适用于需要频繁插入和删除元素的场景。
  2. List:
    • 速度:较快,因为它是一个泛型集合,支持泛型类型的元素。
    • 内存:较低,因为它是一个动态数组,可以根据需要自动调整大小。
    • 使用场景:适用于需要存储大量元素的场景,例如数据库查询结果。
  3. HashTable:
    • 速度:较快,因为它使用哈希表来存储数据,查找速度快。
    • 内存:较高,因为它需要存储键值对,可能会导致内存浪费。
    • 使用场景:适用于需要快速查找、插入和删除数据的场景,例如实现缓存或字典。
  4. Dictionary:
    • 速度:较快,因为它使用哈希表来存储数据,查找速度快。
    • 内存:较高,因为它需要存储键值对,可能会导致内存浪费。
    • 使用场景:适用于需要快速查找、插入和删除数据的场景,例如实现缓存或字典。
  5. SortedList:
    • 速度:较慢,因为它使用数组来存储数据,并且在插入和删除时需要移动元素。
    • 内存:较高,因为它需要存储键值对,并且需要额外的内存来存储排序信息。
    • 使用场景:适用于需要按顺序存储和访问数据的场景,例如实现有序字典。
  6. SortedDictionary:
    • 速度:较慢,因为它使用红黑树来存储数据,并且在插入和删除时需要平衡树。
    • 内存:较高,因为它需要存储键值对,并且需要额外的内存来存储排序信息。
    • 使用场景:适用于需要按顺序存储和访问数据的场景,例如实现有序字典。

总之,在选择适当的数据结构时,需要根据实际需求和性能要求进行权衡。例如,如果需要快速查找、插入和删除数据,可以选择 HashTable 或 Dictionary。如果需要按顺序存储和访问数据,可以选择 SortedList 或 SortedDictionary。如果需要频繁插入和删除元素,可以选择 ArrayList。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【愚公系列】2021年11月 C#版 数据结构基本使用(C#版)

一:数组的使用 数组的特点:内存连续存储,节约空间,可以索引访问,读取快,增删慢 //Array:在内存上连续分配的,而且元素类型是一样的 //可以坐标访问 读取快--增删慢,长度不变 Console.WriteLine...*******ArrayList-end******************"); //List:也是Array,内存上都是连续摆放;不定长;泛型,保证类型安全,避免装箱拆箱 //读取快--增删慢...*****List-end******************"); 二:链表的使用 链表的特点:非连续摆放,存储数据+地址,找数据的话就只能顺序查找,读取慢;增删快。...******************"); SortedDictionary dic = new SortedDictionary(); dic.Add...();//用于最小化集合的内存开销 sortedList.Remove("Third"); sortedList.RemoveAt(0); sortedList.Clear();

32910

C#语言各种集合介绍

但不能预先知道数组的大小,就可以使用ArrayList ArrayList把所有元素都当作object对象引用,因而在访问ArrayList的元素时要进行类型转换 优点:动态改变大小、灵活方便的插入和删除元素...3)Hashtable 实现了接口:IDictionary、ICollection、IEnumerable 可以向Hashtable中自由添加和删除元素,有些像ArrayList,但没有那么大的性能开销...4)SortedList 实现了接口:IDictionary、ICollection、IEnumerable SortedLIst兼顾了ArrayListHashtable的优点,可按键值来排序 5...4.集合性能 许多集合类都提供了相同的功能,例如,SortedListSortedDictionary的功能几乎完全相同。...一个集合使用内存少,另一个集合的元素检索速度快。在MSDN文档中,集合的方法常常有性能提示:O(1),时间与操作项时间一致。

58221

.Net集合详解

也可以自由添加和删除元素,这有点像List,但没有在内存中移动后续元素的性能开销。...多以它们也有不同之处: SortedList使用内存SortedDictionarySortedDictionary的元素插入和删除比较快 在用已排好序的数据填充集合时,若不需要修改容量,SortedList就比较快 六、集   包含不重复元素的的集合称为”集(set)”,.Net Core...但是其性能常常差别非常巨大,一个集合使用内存少,另一个元素检索起来速度快,在MSDN文档中,集合的方法常常有性能的提示,给出以O记号表示的操作时间: O(1) O(log n) O(n)   ...O(n)表示对于集合执行一个操作需要的时间最坏的情况是N,如果需要重新给集合分配内存ArrayList类的Add()方法就是一个O(n)操作。

56430

分享|.Net集合详解

也可以自由添加和删除元素,这有点像List,但没有在内存中移动后续元素的性能开销。...多以它们也有不同之处: SortedList使用内存SortedDictionarySortedDictionary的元素插入和删除比较快 在用已排好序的数据填充集合时,若不需要修改容量,SortedList就比较快 六、集   包含不重复元素的的集合称为”集(set)”,.Net Core...但是其性能常常差别非常巨大,一个集合使用内存少,另一个元素检索起来速度快,在MSDN文档中,集合的方法常常有性能的提示,给出以O记号表示的操作时间: O(1) O(log n) O(n)   ...O(n)表示对于集合执行一个操作需要的时间最坏的情况是N,如果需要重新给集合分配内存ArrayList类的Add()方法就是一个O(n)操作。

51720

C#集合类型大揭秘

相对于下面提到的SortedList来说,SortedDictionary在添加和删除元素时更快一些。...3.SortedList 在既需要快速查找又需要顺序排列的场景下,Dictionary就无能为力了,因为Dictionary使用了散列函数,并不支持线性排序。...我们可以使用SortedList集合类来应对这种场景。...SortedListSortedDictionary同时支持快速查询和排序,SortedList 优势在于使用内存SortedDictionary 少;但是SortedDictionary可对未排序的数据执行更快的插入和移除操作...非关联性泛型集合类 1.List 泛型的List 类提供了不限制长度的集合类型,List内部实现使用数据结构是数组。我们都知道数组是长度固定的,那么List不限制长度必定需要维护这个数组。

1.5K40

.NET中的泛型集合

1.HashTable大数据量插入数据时需要花费比Dictionary大的多的时间。 2.for方式遍历HashTableDictionary速度最快。...3.在foreach方式遍历时Dictionary遍历速度更快。 4.在单线程的时候使用Dictionary更好一些,多线程的时候使用HashTable更好。...但它们的内部数据结构却迥然不同:SortedList维护一个排序的条目数组,而SortedDictionary使用的是红黑树结构(参见维基百科条目http://mng.bz/K1S4)。...这导致了插入和移除时间以及内存效率上的显著差异。...向SortedDictionary中的平衡树添加项总是相当廉价(复杂度为O(log n)),但在堆上会为每个条目分配一个树节点,这将使开销和内存碎片比使用SortedList键值条目的数组要更多

14220

数据结构基础温故-6.查找(上):基本查找与树表查找

其中SortedList使用了两个数组来分别存放key和value,并巧妙地运用了二分查找使得它的各项性能与ArrayList十分近似。...在.NET中的System.Collections.Generic命名空间下,SortedDictionary类就是使用红黑树实现的。...(SortedList内部是Array,而SortedDictionary内部是红黑树)进行一下对比,这里使用了老赵的CodeTimer类: (1)新增操作对比   由于SortedList用Array...从上图也可以看出:在10w次的删除操作中,SortedDictionary的处理速度和性能消耗较SortedList好的不是一丁半点。...参考资料 (1)程杰,《大话数据结构》 (2)陈广,《数据结构(C#语言描述)》 (3)段恩泽,《数据结构(C#语言版)》 (4)许两会,《.NET集合类的研究—有序集合(SortedDictionary

72530

数据结构基础温故-6.查找(下):哈希表

在.NET中,实现了哈希表数据结构的集合类有两个,其中一个就是Hashtable,另一个是泛型版本的Dictionary。...HashtableDictionary 的区别: ①Hashtable使用闭散列法来解决冲突,而Dictionary使用开散列法解决冲突; ②Dictionary相对Hashtable来说需要更多的存储空间...,但它不会发生二次聚集的情况,并且使用了泛型,相对非泛型可能需要的装箱和拆箱操作,Dictionary速度更快; ③Hashtable使用了填充因子的概念,而Dictionary则不存在填充因子的概念...; ④Hashtable在扩容时由于重新计算哈希地址,会消耗大量时间计算,而Dictionary的扩容相对Hashtable来说更快; ⑤单线程程序中推荐使用Dictionary,而多线程程序中则推荐使用...四、.NET中几种查找表的对比 4.1 测试对比介绍   在.NET中有三种主要的查找表的数据结构,分别是SortedDictionary(前面已经介绍过了,其内部是红黑树数据结构实现)、Hashtable

58110

最全数据结构详述: List VS IEnumerable VS IQueryable VS ICollection VS IDictionary

本文对常用的数据结构详述:Array, ArrayListList,IList,ICollection, Stack, Queue, HashTable, Dictionary, IQueryable...可使用Foreach关键字实现数组迭代和查找。 因为数组大小是固定的,且是强类型数据结构,因此在运行时只占用很少的内存,运行时效率很高。 ?...ArrayList 不是强类型,ArrayList中不同元素类型可以不相同,并且需要在运行时根据实际的输入来确定元素类型。因此在运行时消耗内存较多。 3....可使用Froeach 关键字操作ArrayList。 ?...(哈希表) HashTable是一种定义关键字的数据结构体,使用哈希表查找数据非常方便,哈希表既不是强类型也不固定大小限制。

1.9K80

Java集合框架

Java集合框架 集合框架底层数据结构总结 Collection List Arraylist: Object数组 Vector: Object数组 LinkedList: 双向循环链表 Set HashSet...该类实现了Map接口,根据键的HashCode值存储数据,具有很快的访问速度,最多允许一条记录的键为null,不支持线程同步。 12 TreeMap 继承了AbstractMap,并且使用一颗树。...4 Hashtable HashtableDictionary(字典) 类的子类,位于 java.util 包中。...底层数据结构Arraylist 底层使用的是Object数组;LinkedList 底层使用的是双向循环链表数据结构; 3....内存空间占用: ArrayList的空 间浪费主要体现在在list列表的结尾会预留一定的容量空间,而LinkedList的空间花费则体现在它的每一个元素都需要消耗比ArrayList更多的空间(因为要存放直接后继和直接前驱以及数据

97610

C#基础深入学习02

C#基础深入学习02 哈希表(HashtableHashtable 类代表了一系列基于键的哈希代码组织起来的键/值对。它使用键来访问集合中的元素。...和 SortedList的排序问题 /// hashtable本身没有排序方法,需要借助list /// /// <param name...; } } } ArrayListList 的比较 ArrayList ArrayList是一个特殊数组,通过添加和删除元素就可以动态改变数组的长度。...ArrayList集合相对于数组的优点:支持自动改变大小,可以灵活的插入元素,可以灵 活的删除元素,可以灵活的访问元素,但是ArrayList只支持一维,并且查询和检索的 速度比较慢。...; } } } List List是由ArrayList发展而来的集合,同样具备了ArrayList相对于Array的优点,List是一种泛型集合,解决了ArrayList对于值类型需要拆箱和装箱的缺点

14710

Java基础小结(三)

Java 数据结构 Java中的数据结构主要包括以下几种接口和类: 枚举(Enumeration) 位集合(BitSet) 向量(Vector) 栈(Stack) 字典(Dictionary) 哈希表(...字典(Dictionary) 字典(Dictionary) 类是一个抽象类,它定义了键映射到值的数据结构。 当你想要通过特定的键而不是整数索引来访问数据的时候,这时候应该使用Dictionary。...由于Dictionary类是抽象类,所以它只提供了键映射到值的数据结构,而没有提供特定的实现。 注: Dictionary类已经过时了。在实际开发中,你可以实现Map接口来获取键/值的存储功能。...哈希表键的具体含义完全取决于哈希表的使用情景和它包含的数据。 Hashtable是原始的java.util的一部分, 是一个Dictionary具体的实现 。...2)数据增长:当需要增长时,Vector默认增长为原来一倍 ,而ArrayList却是原来的50%  ,这样,ArrayList就有利于节约内存空间。

52010
领券