如果需要,请随意更正我的术语和理解列表。
如果我有五个项目的列表,其中每个项目都有唯一的ID ...
[item 1]
[item 2]
[item 3]
[item 4]
[item 5]
我删除ID为72的项目(例如),它恰好是列表中的第3个...
它会像这样结束......
[item 1]
[item 2]
[null]
[item 4]
[item 5]
或者像这样
[item 1]
[item 2]
[item 3]
[item 4]
以前的第4项现在是第3项等等。
请解释您是否可以:)
答案 0 :(得分:14)
第二种选择。它表现为List,而不是数组。
可以删除特定索引处的元素。该指数和较高指数的先前元素指数减少1。
答案 1 :(得分:6)
实际上,随着System.Collections.Generic.List<T>
的实现,用于存储项目的基础数组最终将如下所示:
[item 1]
[item 2]
[item 4]
[item 5]
[null]
也就是说,在不改变数组大小的情况下,第3项已被删除,第4项和第5项已被移位。
当然,如果枚举集合,则会省略尾随空值,因为集合的大小用于确定停止的位置。 (编辑:尝试访问集合逻辑末尾之外的指标将失败。)
答案 2 :(得分:3)
在你的例子中
[item 1]
[item 2]
[item 3]
[item 4]
[item 5]
如果删除[item 3],那么List-class只会将该项后面的数组部分复制到items索引中,列表的内部数组将如下所示:
[item 1]
[item 2]
[item 4]
[item 5]
[default(item)]
但是,您无法访问现在的最后一项,因为List会保留一个大小变量来跟踪可以访问的项目数。实际上,List看起来像是你外面的第二个例子,但内部数组实际上可能更大。
修改强> 还要注意,实际上阵列比那个大得多,因为List&lt;&gt;插入项目时会调整大小(当新项目没有足够的空间时,它会使数组大小加倍)。例如,如果您向列表中添加5个项目,那么您的列表将如下所示:
[item 1]
[item 2]
[item 3]
[item 4]
[item 5]
[default(item)]
[default(item)]
[default(item)]
答案 3 :(得分:1)
我的陈述已经通过技术观察得到了纠正,但是出于可枚举的目的,一个List对象,当你删除一个项目时,它就像你的第二个例子一样。