Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我应该使用什么数据结构来跟踪最近使用的项目?_Java_Algorithm_Data Structures - Fatal编程技术网

Java 我应该使用什么数据结构来跟踪最近使用的项目?

Java 我应该使用什么数据结构来跟踪最近使用的项目?,java,algorithm,data-structures,Java,Algorithm,Data Structures,我需要像有界队列这样的东西,在这里我只能插入10个元素。新元素应替代最后插入的元素应该只有n个不同的元素 顺便说一下,我正在寻找Java方面的建议。这是一个LRU算法的实现 这是队列数据结构的经典应用程序。大小为10的堆栈将跟踪您添加到其中的前10个元素,而大小为10的队列将跟踪最近添加的10个元素。如果您正在寻找“最近项目”列表,如您问题的标题所示,那么排队就是最好的选择 编辑:以下是一个示例,用于可视化目的: 假设您希望跟踪最近的4个项目,并按以下顺序访问8个项目: F、 O,R,T,

我需要像有界队列这样的东西,在这里我只能插入10个元素。新元素应替代最后插入的元素应该只有n个不同的元素


顺便说一下,我正在寻找Java方面的建议。

这是一个LRU算法的实现


这是队列数据结构的经典应用程序。大小为10的堆栈将跟踪您添加到其中的前10个元素,而大小为10的队列将跟踪最近添加的10个元素。如果您正在寻找“最近项目”列表,如您问题的标题所示,那么排队就是最好的选择

编辑:以下是一个示例,用于可视化目的:

假设您希望跟踪最近的4个项目,并按以下顺序访问8个项目:

F、 O,R,T,Y,T,W,O

以下是您的数据结构随时间的变化情况:

access  item      queue          stack
  1      F     [ F . . . ]    [ . . . F ]
  2      O     [ O F . . ]    [ . . O F ]
  3      R     [ R O F . ]    [ . R O F ]
  4      T     [ T R O F ]    [ T R O F ]
  5      Y     [ Y T R O ]    [ Y R O F ]
  6      T     [ T Y T R ]    [ T R O F ]
  7      W     [ W T Y T ]    [ W R O F ]
  8      O     [ O W T Y ]    [ O R O F ]
从堆栈中删除顶部元素将删除最近添加的项,而不是最旧的项

从队列中删除一个元素将删除最旧的项目,因此您的队列将自动保存最新的项目


编辑:多亏了,这里有一些关于。

一个队列的文档,该队列由一种跟踪对同一元素的多次访问的机制支持……OP说:新元素应该覆盖最后插入的元素。这是后进先出。他不想看到最近的10个,除非他的问题措辞不正确。@Kevin Crowell:我想是这样的。他的问题的标题提到了一个“最近的项目”列表,所以我想他用“最后一个”来表示“最老的”。@Sasha:你必须自己写,但这并不太难。我为一个例子添加了一个链接,Java确实有一个队列。队列接口自1.5(2004)起就存在于Java中,LinkedList和其他集合实现了它。最后一个是最近的。你的问题不清楚。您希望新元素替换最旧的元素还是最新的元素?你是在看使用(访问)还是插入?@Rich B:这是故意的失误。如果允许GIYF问题,那么这些答案也应该被允许。然而,这次失误的原因是,OP实际上发现了这一点。你不希望常见问题被重复一次又一次,是吗?