没太多好说的,直接贴代码吧 比较容易懂
接口:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ArrayExpand
{
public interface IArray<T>
{
int GetCapciaty();
int GetSize();
bool IsEmpty();
void Add(int index, T element);
void AddFirst(T element);
void AddLast(T element);
T Get(int index);
void Set(int index, T element);
void Print();
bool Contains(T element);
int Find(T element);
T Remove(int index);
T RemoveFirst();
T RemoveLast();
void RemoveElement(T element);
}
}
具体实现如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ArrayExpand
{
class ArrayTest<T> : IArray<T>
{
private int size;
private readonly int capciaty;
private T[] data;
public ArrayTest(int capciaty)
{
data = new T[capciaty];
size = 0;
}
public void Add(int index, T element)
{
if (index < 0 || index > size)
{
Console.WriteLine("非法的下标");
return;
}
if (size == data.Length)
Resize(size * 2);
for (int i = size - 1; i >= index; i--)
{
data[i + 1] = data[i];
}
data[index] = element;
size++;
}
private void Resize(int length)
{
T[] data2 = new T[length];
for (int i = 0; i < size; i++)
{
data2[i] = data[i];
}
data = data2;
}
public void AddFirst(T element)
{
Add(0, element);
}
public void AddLast(T element)
{
Add(size, element);
}
public bool Contains(T element)
{
for (int i = 0; i < size; i++)
{
if (element.Equals(data[i]))
{
return true;
}
}
return false;
}
public int Find(T element)
{
for (int i = 0; i < size; i++)
{
if (element.Equals(data[i]))
{
return i;
}
}
return -1;
}
public T Get(int index)
{
if (index < 0 || index >= size)
{
throw new Exception("下标不合法");
}
return data[index];
}
public int GetCapciaty()
{
return data.Length;
}
public int GetSize()
{
return size;
}
public bool IsEmpty()
{
return size == 0;
}
public void Print()
{
for (int i = 0; i < size; i++)
{
Console.WriteLine(data[i]);
}
}
public T Remove(int index)
{
if (index < 0 || index > size)
{
throw new Exception("下标不合法");
}
T element = data[index];
for (int i = index + 1;i<size;i++)
{
data[i - 1] = data[i];
}
size--;
if (size == data.Length / 4 && data.Length / 2 != 0)
Resize(data.Length / 2);
return element;
}
public void RemoveElement(T element)
{
int i = Find(element);
if (i != -1)
Remove(i);
}
public T RemoveFirst()
{
T element = Remove(0);
return element;
}
public T RemoveLast()
{
T element = Remove(size - 1);
return element;
}
public void Set(int index, T element)
{
if (index < 0 || index >= size)
{
Console.WriteLine("下标不合法");
}
data[index] = element;
}
}
}