我正在寻找某种实现IList<T>
或ICollection<T>
行为方式,它可以容纳指定数量的项目。
如果添加新项目会超过限制数量,则应自动丢弃第一个项目,以便为新添加的项目腾出空间。
我正在寻找某种实现IList<T>
或ICollection<T>
行为方式,它可以容纳指定数量的项目。
如果添加新项目会超过限制数量,则应自动丢弃第一个项目,以便为新添加的项目腾出空间。
如果没有关于要求(内存、读取次数、写入次数等)的更多信息,这里是一个非常基本的实现:
class CircularList<T> : ICollection<T>
{
private readonly int capacity;
private readonly LinkedList<T> list;
public CircularList(int capacity)
{
this.capacity = capacity;
this.list = new LinkedList<T>();
}
public int Count
{
get { return this.list.Count; }
}
public bool IsReadOnly
{
get { return false; }
}
public void Add(T item)
{
if (this.list.Count == this.capacity)
this.list.RemoveFirst();
this.list.AddLast(item);
}
public void Clear()
{
this.list.Clear();
}
public bool Contains(T item)
{
return this.list.Contains(item);
}
public void CopyTo(T[] array, int arrayIndex)
{
this.list.CopyTo(array, arrayIndex);
}
public IEnumerator<T> GetEnumerator()
{
return this.list.GetEnumerator();
}
public bool Remove(T item)
{
return this.list.Remove(item);
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}