C#中Collection,List和ArrayList的区别

2024-12-31 13:26:28
推荐回答(1个)
回答1:

1. List是用来在高性能环境下的类,Collection是为了扩展
使用Collection,开发人员可以重写ClearItems, InsertItem, RemoveItem 和SetItem, 因为它们是protected virtual类型的,而List却没有这些扩展。

2. 实现的接口不一样
Collection实现IList, ICollection, IEnumerable, IList, ICollectionIEnumerable
List实现IList, ICollection, IEnumerable, IList, ICollectionIEnumerable
ArrayList实现IList, ICollection, IEnumerable, ICloneable
IList,ICollection, IEnumerable和IList, ICollection, IEnumerable是完全不同的,前者用于范型,
view plain
public interface IList : ICollection, IEnumerableIEnumerable
{
T Item;
abstract int IndexOf(T item);
abstract void Insert(int index, T item);
abstract void RemoveAt(int index);
}
public interface IList : ICollectionIEnumerable
{
bool IsFixedSize;
bool IsReadOnly;
object Item;
abstract int Add(object value);
abstract void Clear();
abstract bool Contains(object value);
abstract int IndexOf(object value);
abstract void Insert(int index, object value);
abstract void Remove(object value);
abstract void RemoveAt(int index);
}

另一方面,Collection和List也实现了IList, ICollectionIEnumerable,说明这两个类比ArrayList提供了更多的方法。

3. 范型与非范型的区别
ArrayList是非范型类,如此,这个集合可以包含不同类型成员,我们可以看到,Add方法是Add(Object obj),所以这是一个对象杂陈的类。使用这个类进行操作时,IndexOf,Remove等都要使用类的Equals和HashCode,所以如果是自 己实现的类,一定要判断是否同一类型。

比如这个类是 TestType

view plain
public override bool Equals(Object obj)
{
TestType tType = obj as TestType;
if (tType == null)
{
return false;
}
//其它业务代码
...
}

总结:
如果有扩展要求,可以考虑使用Collection,如果有性能要求,考虑用List,如果想存放不同类型的对象,使用ArrayList。