// Contains returns true if the specified element is in the ArrayList.
// It does a linear, O(n) search. Equality is determined by calling
// item.Equals().
//
/// <include file='doc/ArrayList.uex' path='docs/doc[@for="ArrayList.Contains"]/*' />
public virtual bool Contains(Object item) {
if (item==null) {
for(int i=0; i<_size; i++)
if (_items[i]==null)
return true;
return false;
}
else {
for(int i=0; i<_size; i++)
if (item.Equals(_items[i]))
return true;
return false;
}
}
// It does a linear, O(n) search. Equality is determined by calling
// item.Equals().
//
/// <include file='doc/ArrayList.uex' path='docs/doc[@for="ArrayList.Contains"]/*' />
public virtual bool Contains(Object item) {
if (item==null) {
for(int i=0; i<_size; i++)
if (_items[i]==null)
return true;
return false;
}
else {
for(int i=0; i<_size; i++)
if (item.Equals(_items[i]))
return true;
return false;
}
}
以上是Contains方法的实现,可见采用的是顺序查找的方法。如果元素的数量比较大,而且已经排序的话,可以考虑使用BinarySearch()的方法。
Repeat()返回 ArrayList,它的元素是指定值的副本。设置一个指定值和这个指定值要在ArrayList中出现的次数。由实现代码可以看见,生成了一个全新的ArrayList对象。
// Returns an IList that contains count copies of value.
//
/// <include file='doc/ArrayList.uex' path='docs/doc[@for="ArrayList.Repeat"]/*' />
public static ArrayList Repeat(Object value, int count) {
if (count < 0)
throw new ArgumentOutOfRangeException("count",Environment.GetResourceString("ArgumentOutOfRange_NeedNonNegNum"));
ArrayList list = new ArrayList((count>_defaultCapacity)?count:_defaultCapacity);
for(int i=0; i<count; i++)
list.Add(value);
return list;
}
//
/// <include file='doc/ArrayList.uex' path='docs/doc[@for="ArrayList.Repeat"]/*' />
public static ArrayList Repeat(Object value, int count) {
if (count < 0)
throw new ArgumentOutOfRangeException("count",Environment.GetResourceString("ArgumentOutOfRange_NeedNonNegNum"));
ArrayList list = new ArrayList((count>_defaultCapacity)?count:_defaultCapacity);
for(int i=0; i<count; i++)
list.Add(value);
return list;
}
TrimToSize() 方法。将ArrayList.Capacity减少到ArrayList中包含的元素数量。如果ArrayList是ReadOnly或者是FixedSize,那么将抛出NotSupportedException的异常。如果ArrayList中没有任何元素,那么使用TrimToSize()方法将使ArrayList.Capacity = 16(默认值)。
在ArrayList类中由一个_version的整型的私有成员。在每次对ArrayList对象进行修改的时候,_version都会自增1。主要的作用是,在同步的时候。比如在进行枚举遍历的时候,如果别的线程修改了当前的ArrayList对象,那么比较发现_version和通过GetEnumerator()时候的版本不相同,这个时候就会抛出InvalidOperationException的异常