gpt4 book ai didi

c# - 在 C# 或 Java 中对 MruList 进行高效建模

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:04:35 28 4
gpt4 key购买 nike

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

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

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

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com