一、提供的属性和接口
interface IMList<T>
{
int Capacity { get; set; }
int Count { get; }
void Add(T item);
void Insert(int index, T item);
bool Remove(T item);
bool RemoveAt(int index);
bool Contains(T item);
int IndexOf(T item);
void Clear();
}
二、顺序存储实现
//////////////////////////////////////////顺序存储 List//////////////////////////////////////////////////
class MListSQ<T> : IMList<T>
{
private const int DEFAULT_CAPACITY = 4;
private static readonly T[] _defaultData = new T[DEFAULT_CAPACITY];
private T[] _items;
private int _count = 0;
public MListSQ() {
_items = _defaultData;
}
public MListSQ(int capacity)
{
_items = new T[capacity];
}
T this[int index]
{
get { return _items[index]; }
set { _items[index] = value; }
}
public int Capacity
{
get { return _items.Length; }
set
{
if(value < _count)
{
throw new IndexOutOfRangeException("容量设置过小,会有数据丢失");
}
if(value != _items.Length)
{
T[] temp = new T[value];
_items.CopyTo(temp, 0);
_items = temp;
}
}
}
public int Count
{
get { return _count; }
}
//调整容量大小
private void ReSizeCapacity(int size)
{
if (size <= _items.Length) return;//容量足够
if (size < _count) return; //容量过小 丢失数据
int _capacity = (