我基于一个数组来实现我的集合。我继承自模板接口 Collection。
Count 属性的实现存在问题。我确实喜欢这样:
public int Count
{
get
{
int counter = 0;
while (array[counter] != null)
counter++;
return counter;
}
}
他们向我指出这不是很正确
为了通过索引引用现有集合,您需要知道索引的最大值。否则,当集合超出范围时将引发异常。
您可以向集合本身询问集合的最大索引。这是它的属性
.Count(或者.Length如果它是一个数组)。好吧,既然你有长度,什么都不需要计算。您已经设法以一种非常低效的方式实现了一项操作:您正在迭代所有元素!这种糟糕的方式适用于 sish 字符串,因为 (a) 确保 sish 字符串具有最终的 null 元素,并且没有中间的 null 元素,并且 (b) 没有其他有效的方法来查找 sish 字符串的长度。但是对于高级集合,您应该使用快速方法。
如果在您的实现中数组的长度不一定等于集合的长度,请使用
count包含集合实际长度的字段并将其保持在正确的状态。集合预计会在 O(1) 中轮询长度(也就是说,速度与元素数量无关)。