您将如何在 C# 或 Java 中实现容量受限的通用 MruList?

我想要一个代表最近使用的缓存或列表(= MruList)的类。它应该是通用的,并且限于实例化时指定的容量(计数)。我希望界面是这样的:

public interface IMruList<T>
{
    public T Store(T item);
    public void Clear();
    public void StoreRange(T[] range);
    public List<T> GetList();
    public T GetNext(); // cursor-based retrieval
}

每个 Store() 应该将项目放在列表的顶部(前面?)。 GetList() 应该返回有序列表中的所有项目,按最近的商店排序。如果我调用 Store() 20 次并且我的列表有 10 个项目,我只想保留最近存储的 10 个项目。 GetList 和 StoreRange 旨在支持在应用程序启动和关闭时检索/保存 MruList。

这是为了支持 GUI 应用程序。
我想我可能还想知道存储项目的时间戳。也许。没有把握。

在内部,您将如何实现它,为什么?

(不,这不是类(class)作业)

最佳答案

关于你的方法的一些评论

  • 为什么有 Store return T?我知道我刚刚添加的内容,除非您明确想要链接
  • 的方法,否则没有必要将其返回给我
  • 将 GetNext() 重构为一个新类。它代表一组不同的功能(存储与游标遍历),应该由单独的接口(interface)表示。它还具有可用性问题,因为当同一堆栈上 Activity 的两个不同方法想要遍历结构时会发生什么?
  • GetList() 应该可能返回 IEnumerable<T> 。返回 List<T> 要么强制预先显式复制,要么返回指向底层实现的指针。两者都不是很好的选择。

  • 至于支持接口(interface)的最佳结构是什么。似乎最好的实现方式是拥有一种数据结构,它可以有效地添加到一端,并从另一端删除。双向链表非常适合这种情况。

    关于c# - 用 C# 或 Java 对 MruList 进行高效建模,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/849527/

    10-10 12:25