C# 中小型集合的 List.Add 与 HashSet.Add

Cri*_*cia 5 c# performance list set

给定

HashSet<T> set;
List<T> list;
T t;
Run Code Online (Sandbox Code Playgroud)

其中哪一个对于小型集合表现更好?

if (! list.Contains (t)) list.Add (t);
Run Code Online (Sandbox Code Playgroud)

或者

set.Add (t);
Run Code Online (Sandbox Code Playgroud)

怀疑来源:HashSet 与 List 性能

小智 4

它确实与您将如何使用数据结构有关。如果你需要使用索引访问一个项目,那么你不能使用HashSet,如果你需要存储重复项,你也不能使用HashSet。列表通常用于大多数操作,因此如果您不了解 HashSet 的底层设计和功能,那么列表可能就足够了。在此输入图像描述

  • 根据 MSDN,如果 count 小于内部数组的容量,List.Add() 和 HashSet.Add() 都是 O(1),如果需要调整对象大小,则都是 O(n)。 (4认同)