Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 集合初始化是否正确设置了哈希集的初始大小?_C#_Memory_Collections - Fatal编程技术网

C# 集合初始化是否正确设置了哈希集的初始大小?

C# 集合初始化是否正确设置了哈希集的初始大小?,c#,memory,collections,C#,Memory,Collections,集合初始化是否也设置结果集的初始大小 具体来说:这是代码 var someSet = new HashSet<int> { 42, 667 }; var someSet=newhashset{42667}; …等效于下面的代码,其中初始大小是显式设置的 var someSet = new HashSet<int>(2) { 42, 667 }; var-someSet=newhashset(2){42667}; TL;博士如果已有数组或集合,则不要使用集合初始值设定

集合初始化是否也设置结果集的初始大小

具体来说:这是代码

var someSet = new HashSet<int> { 42, 667 };
var someSet=newhashset{42667};
…等效于下面的代码,其中初始大小是显式设置的

var someSet = new HashSet<int>(2) { 42, 667 };
var-someSet=newhashset(2){42667};

TL;博士如果已有数组或集合,则不要使用集合初始值设定项

集合初始值设定项只使用
Add()
来创建集合,因此是的,首先设置大小会稍微提高性能。不过,在大多数情况下,你不太可能真正注意到任何差异


的代码有一个小宝石:

公共哈希集(IEnumerable集合、IEqualityComparer比较器)
{
...........
//为了避免过度调整大小,首先根据集合的计数设置大小。集合
//可能包含重复项,所以如果生成的哈希集大于
//门槛
ICollection coll=作为ICollection的集合;
int suggestedCapacity=coll==null?0:coll.Count;
初始化(建议容量);
本.与(收款)联合;

因此,如果您有一个现有的数组(它是一个
i集合
,也是一个
列表
)那就没关系了。这只是使用LINQ
Where
等时的问题,或者使用集合初始值设定项时的问题。

这是基于观点的。如果你知道的话,提供初始容量当然可以为你节省一些纳秒。你不需要设置它的大小,但它是初始容量。很多这样的“动态”(意味着您可以添加/删除元素)数据结构的工作原理是它们有一个固定的底层数据结构(通常是一个数组)这将一直支持到某个容量。如果它处于最大容量,并且您添加了另一个元素,那么它将重建自己的内部数据结构以支持更多的元素,这是一个相对昂贵的操作。因此,如果您知道并设置了初始容量,您可以在添加初始元素时跳过此内部重建。但是这不会阻止任何人向基础数组中添加更多元素,甚至超过初始大小。@HimBromBeere它不是基于意见的,只是访问相关源代码的问题在
哈希集
实现中有一些有趣的代码。例如,如果您有超过7199369个元素,那么当它下次扩展un时Derling数组,它将搜索下一个更高的素数!请注意,虽然这个答案通常是正确的,但与问题无关。集合初始值设定项中没有集合…是的,我想说的是:如果您担心性能,那么请预测。将重写