.NET集合类型,用于存储最近的列表

时间:2010-10-03 16:25:18

标签: .net collections queue

.NET中是否有特定的集合类型,允许存储有限数量的对象并自动删除最旧的元素?实现此类“最近文件”功能的最简单方法是什么?

3 个答案:

答案 0 :(得分:3)

您可能想尝试System.Collections.Queue

每次将对象添加到队列(Enqueue())之前,都可以检查Count以确定是否需要删除最旧的对象(Dequeue())。 / p>

答案 1 :(得分:2)

我会选择一个包含链表的类。有关起点的快速而肮脏的示例,请参阅下面的代码。当然,您需要添加其他访问者等。这将使您能够将最近访问的项目移动到列表的头部等。

public class RecentList<T> : IEnumerable<T>
{
  private LinkedList<T> _list = new LinkedList<T>();
  private int _maxItems;

  public RecentList(int maxItems)
  {
    _maxItems = maxItems;
  }

  public void Add(T item)
  {
    _list.AddFirst(item);
    if (_list.Count > _maxItems)
    {
      _list.RemoveLast();
    }
  }

  public IEnumerator<T> GetEnumerator()
  {
    return _list.GetEnumerator();
  }

  IEnumerator IEnumerable.GetEnumerator()
  {
    return _list.GetEnumerator();
  }
}

答案 2 :(得分:1)

您可能对LRU cache实施感兴趣,因为Queue不会为您提供简单的查找功能。

编辑:对于仅提供“最近的文件”功能,LRU缓存将是过度的 - 与其他海报建议一样使用简单的队列。