Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/310.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#_.net_Vb.net_List_Boxing - Fatal编程技术网

C# 有很多布尔人的拳击问题吗?还有别的选择吗?

C# 有很多布尔人的拳击问题吗?还有别的选择吗?,c#,.net,vb.net,list,boxing,C#,.net,Vb.net,List,Boxing,我需要一个布尔人列表(大小从200到200k)。如果我使用System.Collections.Generic.List我会遇到严重的装箱问题(如果我错了,请纠正我) 有哪些替代方案?(当然我知道我可以使用布尔数组,但我需要能够轻松地从数组中添加和删除内容) 编辑: 我的另一个问题是(与上面的问题类似,)如果我需要一个整数列表,我有什么解决方案呢?试试BitArray类: 编辑:如果您关心空间,则位数组比列表小8倍。位数组将使用每个布尔值一位,而列表将使用每个布尔值8位。尝试位数组类: 编辑:如

我需要一个布尔人列表(大小从200到200k)。如果我使用
System.Collections.Generic.List
我会遇到严重的装箱问题(如果我错了,请纠正我)

有哪些替代方案?(当然我知道我可以使用布尔数组,但我需要能够轻松地从数组中添加和删除内容)

编辑:


我的另一个问题是(与上面的问题类似,)如果我需要一个整数列表,我有什么解决方案呢?

试试
BitArray
类:


编辑:如果您关心空间,则
位数组
列表
小8倍。
位数组
将使用每个布尔值一位,而
列表
将使用每个布尔值8位。

尝试
位数组
类:

编辑:如果您关心空间,则
位数组
列表
小8倍。
位数组
将使用每个布尔值一位,而
列表
将使用每个布尔值8位。

根据这一点:

通用列表将完全删除装箱问题

而且,我多次在一个列表中保存了许多整数、字符串等,没有任何性能问题。事实上,我以前一直坚持到1000000,没有任何问题。

根据这一点:

通用列表将完全删除装箱问题


而且,我多次在一个列表中保存了许多整数、字符串等,没有任何性能问题。事实上,我以前曾毫无问题地支持过100万次。

定义大。。。200个项目,2000个项目,200万个项目?请不要在标题中写“c#vb.net:”。把那些留在标签上就行了。在任何情况下,“VB.NET”都是一个词。@Mikecito我已经为你的整数列表编辑了问题列表。泛型的全部意义在于它们减轻了任何装箱问题。您可以为
部分指定所需的任何类型。因此,您可以有一个
列表
列表
列表
。定义大。。。200个项目,2000个项目,200万个项目?请不要在标题中写“c#vb.net:”。把那些留在标签上就行了。在任何情况下,“VB.NET”都是一个词。@Mikecito我已经为你的整数列表编辑了问题列表。泛型的全部意义在于它们减轻了任何装箱问题。您可以为
部分指定所需的任何类型。因此,您可以有一个
列表
列表
列表
。是否需要在列表末尾添加和删除?如果是这样,您可以适当地设置Length属性。如果需要在列表中间插入和删除,则可以使用BitArray,在插入/删除位置之后手动转移所有值。但这对性能来说可能并不理想。编辑:事实上,我不太确定这是否对性能有害。如果查看insert的
列表
实现,它会使用数组.Copy调用移动插入点后的所有值,这是一种线性时间操作,与移位位数组中的位相同。@MikeDour:任何数组类型中间的插入操作都可能是O(N),但是,与在
位数组中复制单个项相关联的常数往往比
数组的常数差得多。Copy
,即使包含自身插入逻辑的
位数组
可能管理的每项时间少于
列表
的每项时间,因为它可以同时处理32项。是否需要在列表末尾添加和删除?如果是这样,您可以适当地设置Length属性。如果需要在列表中间插入和删除,则可以使用BitArray,在插入/删除位置之后手动转移所有值。但这对性能来说可能并不理想。编辑:事实上,我不太确定这是否对性能有害。如果查看insert的
列表
实现,它会使用数组.Copy调用移动插入点后的所有值,这是一种线性时间操作,与移位位数组中的位相同。@MikeDour:任何数组类型中间的插入操作都可能是O(N),但是,与在
位数组中复制单个项相关联的常数往往比
数组的常数差得多。Copy
,即使包含自身插入逻辑的
位数组
可能管理的每项时间比
列表
的时间要少,因为它可以一次处理32项。