Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.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,Usecase维护最近n个访问URL的列表(其中n是一个固定数字)。当新的URL添加到列表中时,旧的URL会自动删除(以保持n个元素) 要求数据结构需要按时间排序(如果接受比较器,应该没有问题) 您需要一个循环缓冲区 只需保留一个大小为N、索引为k的数组b[],它指向最早的URL。每次需要添加新URL时,将其分配给b[k]并增加k,如果需要,将其包装:k=(k+1)%N 所有的URL都会被自然排序,最早的在k,第二个在k+1,依此类推,最新的在k-1。(序列包装在数组的末尾)。在java中,有几

Usecase维护最近n个访问URL的列表(其中n是一个固定数字)。当新的URL添加到列表中时,旧的URL会自动删除(以保持n个元素)


要求数据结构需要按时间排序(如果接受比较器,应该没有问题)

您需要一个循环缓冲区

只需保留一个大小为N、索引为k的数组b[],它指向最早的URL。每次需要添加新URL时,将其分配给b[k]并增加k,如果需要,将其包装:k=(k+1)%N


所有的URL都会被自然排序,最早的在k,第二个在k+1,依此类推,最新的在k-1。(序列包装在数组的末尾)。

在java中,有几种实现。继承或扭曲现有实现并像这样实现add()方法应该很简单:

boolean add(E e) {
  if(q.size()==MAX_SIZE) {
    remove();
  }
  q.add(e)
}

使用大小为
n
的代理来覆盖
TreeSet
,并为
URL
创建一个
代理,该代理还存储访问的时间。
然后创建一个
比较器
或实现
可比
并覆盖
等于
哈希代码

对于覆盖
TreeSet,设置
可以帮助您

您需要重写
add
方法。由于您可能不需要
addAll
,因此可以抛出
UnsupportedOperationException

在这之后,您应该会很好,您甚至可以做一些事情,比如每次访问时都存储重访的URL(这意味着指向同一URL的不同代理URL),或者每个URL只存储一个条目。这取决于如何定义
等于
(以及相应的
哈希代码
,分别是
比较
) 方法

小心
TreeSet
使用
compare
方法进行相等检查,而not使用相等方法