毎度、ここから。
public T this[int index] {
get {
if ((uint) index >= (uint)_size) {
ThrowHelper.ThrowArgumentOutOfRangeException();
}
Contract.EndContractBlock();
return _items[index];
}
set {
if ((uint) index >= (uint)_size) {
ThrowHelper.ThrowArgumentOutOfRangeException();
}
Contract.EndContractBlock();
_items[index] = value;
_version++;
}
}ずっと不思議に思っていたことがある。リストの要素nへのアクセスはO(n)であるが、なぜC#のリストはO(1)でアクセスできるのだろうと。 C#のリストについて調べる気になったこの問題だがこのコードですべてが解決した。
RemoveAt(),Remove()は、配列を前に詰める処理があるので多少重い。配列と違って、要素数を全任せできるのがリストの良い部分かな。