.Net数据结构:ArrayList,List,HashTable,Dictionary,SortedList,SortedDictionary——速度、内存和何时使用?

23 浏览
0 Comments

.Net数据结构:ArrayList,List,HashTable,Dictionary,SortedList,SortedDictionary——速度、内存和何时使用?

已关闭。这个问题需要更具特定问题。目前它不接受回答。


想要改进这个问题?通过编辑这篇帖子,让问题更专注于一个问题。

改进这个问题

.NET拥有许多复杂的数据结构。然而,它们中的一些非常相似,我并不总是确定何时使用一个和何时使用另一个。我的大多数C#和VB图书对它们进行了一定程度的讨论,但它们从未进行任何真正的详细说明。

数组(Array)、动态数组(ArrayList)、列表(List)、哈希表(Hashtable)、字典(Dictionary)、排序列表(SortedList)和排序字典(SortedDictionary)之间有什么区别?

哪些可以枚举(IList-可以进行“foreach”循环)?哪些使用键/值对(IDict)?

内存占用情况如何?插入速度?检索速度?

还有其他值得提及的数据结构吗?

我仍在寻找有关内存使用和速度(大O符号)的更多细节

admin 更改状态以发布 2023年5月21日
0
0 Comments

如果可能的话,请使用泛型。   这包括:

  • 使用List而不是ArrayList
  • 使用Dictionary而不是HashTable
0
0 Comments

就我的经验而言:

  • Array* - 表示一个老式的内存数组 - 类似于一个普通 type[] 数组的别名。可枚举。不能自动增长。我假设它的插入和检索速度非常快。

  • ArrayList - 自动增长数组。增加了更多的开销。可枚举,可能比普通数组慢但仍然相当快。这在.NET中经常使用

  • List - 我最喜欢的之一 - 可以与泛型一起使用,因此可以具有强类型数组,例如 List。除此之外,非常类似于 ArrayList

  • Hashtable - 普通的散列表。最坏情况下是 O(1) 到 O(n)。可以枚举值和键属性,并且可以进行键/值对

  • Dictionary - 与上述相同,只是通过泛型进行了强类型化,例如 Dictionary

  • SortedList - 排序的通用列表。由于必须找出放置事物的位置,插入速度变慢。可枚举,检索时可能相同,因为它不必重新排序,但是与普通列表相比,删除速度会较慢。

我倾向于一直使用 ListDictionary - 一旦你开始使用它们与泛型强类型,就很难回到标准的非泛型形式。

还有很多其他的数据结构 - 有一个 KeyValuePair,可以用它来做一些有趣的事情,还有一个 SortedDictionary,也可能有用。

0