使用索引将成员添加到C#List

如果我声明一个C#列表.使其容量达到1000.
现在,如果我想直接在索引1处添加元素,我无法做到.抛出错误.有没有其他选择?
List<sometype> myList = new List<sometype>()
    myList.capacity = 1000;
    myList[1] = element; //exception thrown

我找到的最好的选择是通过数组.

sometype[] myarray = new sometype[1000];
    myarray[1] = element;
    //after filling whole array
    myarray.ToList();

解决方法

List.Capacity仅预先分配内存,以便列表可以增长到容量限制,而不会产生额外的内存分配和相关的堆碎片.将List.Capacity设置为1000不会使1000个条目可访问. List.Count表示实际列表内容的结尾. List.Insert()不能用于插入List.Count之外的项目.

创建一个包含1000个项目的数组然后转换为列表的解决方法只是调用List.Add()1000次以在列表中分配空槽(将List.Count推送到1000)的快捷方式.调用List.Add()1000次可以提高内存效率,因为使用数组技术,内存中将有2个列表副本(数组为1,列表为1).

你打消了使用Dictionary< int,sometype>的建议.对于稀疏数组,因为它将使用比稀疏填充的数组更多的内存.这取决于您的数据有多稀疏.如果索引范围中只有100个项目为0..1000,则密度为10%.你也可以称之为90%浪费的内存.

对于低密度稀疏阵列而言,字典几乎肯定会比分配1000个项目的数组更有效,但仅使用100个时隙.我不知道Dictionary的实现或内存使用的细节,但可能是一个安全的猜测,如果你的稀疏数组的密度是50%或更高,使用数组而不是字典会赢得内存和速度.

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...