简单实现一个List,添加了几个常见的方法
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace learn_01
{
class MyList<T> where T : IComparable
{
private T[] array;
private int count = 0;
public MyList()
{
array = new T[0];
}
public MyList(int size)
{
if (size >= 0)
{
array = new T[size];
}
}
public int Capacity
{
get
{
return array.Length;
}
}
public int Count
{
get
{
return count;
}
}
public void Add(T item)
{
if (Count == Capacity)
{
if (Capacity == 0)
{
array = new T[4];
}
else
{
var NewArray = new T[Capacity * 2];
Array.Copy(array, NewArray, Count);
array = NewArray;
}
}
array[Count] = item;
count++;
}
public T GetItem(int index)
{
if (index >= 0 && index <= count - 1)
{
return array[index];
}
else
{
throw new Exception("索引超出范围");
}
}
public T this[int index]
{
get
{
return GetItem(index);
}
set
{
if (index >= 0 && index <= count - 1)
{
array[index] = value;
}
else
{
throw new Exception("索引超出范围");
}
}
}
public void Insert(int index, T item)
{
if (index >= 0 && index <= count)
{
if (Count == Capacity)
{
if (Capacity == 0)
{
array = new T[4];
}
else
{
var NewArray = new T[Capacity * 2];
Array.Copy(array, NewArray, Count);
array = NewArray;
}
}
for (int i = count - 1; i >= index; i--)
{
array[i + 1] = array[i];
}
array[index] = item;
count++;
}
else
{
throw new Exception("索引超出范围");
}
}
public void RemoveAt(int index)
{
if (index >= 0 && index <= count - 1)
{
for (int i = index + 1; i < Count; i++)
{
array[i - 1] = array[i];
}
count--;
}
else
{
throw new Exception("索引超出范围");
}
}
public int IndexOf(T item)
{
for (int i = 0; i < Count; i++)
{
if (array[i].Equals(item))
{
return i;
}
}
return -1;
}
public int LastIndexOf(T item)
{
for (int i = Count - 1; i >= 0; i--)
{
if (array[i].Equals(item))
{
return i;
}
}
return -1;
}
public void sort()
{
for (int i = 0; i < Count - 1; i++)
{
for (int j = 0; j < Count - 1 - i; j++)
{
if (array[j].CompareTo(array[j + 1]) > 0)
{
T temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
}
}
}
}
}
}