这是我到目前为止的地方:
我有以下用例(作为公正的 jUnit 测试)来展示我想要实现的目标:
buffer.add(o1);
assertEquals(1, buffer.size());
buffer.mark();
buffer.add(o2);
assertEquals(2, buffer.size());
buffer.add(o3);
assertEquals(3, buffer.size());
assertSame(o1, buffer.get());
assertSame(o2, buffer.get());
assertSame(o3, buffer.get());
buffer.rewind();
// NOTE: It must be possible to enter the same object multiple times
// into the buffer.
buffer.add(o2);
assertSame(o2, buffer.get());
assertSame(o3, buffer.get());
assertSame(o2, buffer.get());
我尝试使用包装的列表(几乎重新发明了轮子)、包装的双队列(这完全是一团糟)来解决这个问题,而我刚刚失败的第三次尝试是一个包装的 LinkedList,在其中我得到了除倒带之外的所有其他工作( )。我最近尝试的伪代码是这样的:
if [backBuffer is empty]
[get latest object]
increment currentIndex
if [markIndex < currentIndex]
[put object to backbuffer]
return object
else
[get object from backbuffer at index backBufferIndex]
increment backBufferIndex
return object
这根本不起作用,经过一些编辑后,我设法开始阅读,直到 rewind() 被调用,所以基本上我第三次制作了一堆冗余代码。在这一点上我确实感到有点沮丧,因为我从来都不擅长算法,这就是我现在来找你的原因:请帮助我实现这个和/或指出我更正本机 Java API 解决方案,目前我只是感到难过,因为我无法让它发挥作用。