在C#或Java中对MruList进行高效建模
作者:互联网
您将如何在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个Stored项目. GetList和StoreRange旨在支持在应用程序启动和关闭时检索/保存MruList.
这是为了支持GUI应用程序.
我想我可能也想知道存储项目的时间戳.也许.不确定.
在内部,你将如何实现它,为什么?
(不,这不是课程作业)
解决方法:
关于您的方法的几点评论
>为什么Store返回T?我知道我刚添加的东西,除非你明确想要方法链接,否则将它还给我是没有必要的
>将GetNext()重构为一个新类.它表示一组不同的功能(存储与光标遍历),应由单独的接口表示.它还有可用性问题,因为当在同一堆栈上活动的两个不同方法想要遍历结构时会发生什么?
> GetList()应该可能返回IEnumerable< T>.返回列表< T>要么预先强制显式复制,要么返回指向底层实现的指针.两者都不是一个很好的选择.
至于什么是支持界面的最佳结构.似乎最好实现的是拥有一个有效添加到一端并从另一端移除的数据结构.双重链表很适合这个.
标签:java,c-2,data-structures,class-design 来源: https://codeday.me/bug/20190724/1520187.html