在.NET中,有序集合和无序集合有什么区别

sg3maiej  于 2022-12-01  发布在  .NET
关注(0)|答案(1)|浏览(227)

我一直在学习.NET中的集合,我遇到了术语OrderedUnordered。我不知道它们之间的区别是什么。有人能解释一下确切的区别是什么,以及什么时候一个比另一个更受欢迎。

5sxhfpxr

5sxhfpxr1#

In mathematical terms,一个 * 有序 * 集合就像一个序列,一个 * 无序 * 集合就像一个集合。
实际上,如果顺序很重要,那么就使用有序集合,如果顺序不重要,那么就使用无序集合。
举一个具体的例子:

  • 我想存储哪些文件扩展名适合我的文件上传服务。我会使用无序集合,因为我只关心条目是否在集合中,而不关心 * 顺序 *。
var imageExtensions = new HashSet<string>() { "gif", "jpg", "png" };

// I might just as well have written { "jpg", "png", "gif" } -- it doesn't matter
  • 我想存储一个句子的单词。这个句子可能有重复的单词,我可能想通过索引号来引用“第三个”单词。在这里,我使用了一个有序集合。
var words = new List<string>() { "one", "small", "step", "for", "man", "one", "giant", "leap", "for", "mankind" };

在.NET基底类别库中,无序集合通常会最佳化,以便有效率地寻找集合的项目。例如,HashSet<T>.Contains是O(1)运算。另一方面,寻找List<T>中的项目需要周游清单,因此是O(n)运算。

相关问题