C'est là où je suis jusqu'à présent:Aidez-moi mettre en œuvre un tampon rembobinable
je le suivant le cas d'utilisation suivante (comme test JUnit impartial) pour montrer ce que je veux atteindre:
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());
J'ai essayé de résoudre ceci en utilisant une liste enveloppée (presque réinventé la roue), la double file d'attente enveloppée (celle-ci était un désordre complet), et ma troisième tentative avec laquelle j'ai juste échoué était une LinkedList enveloppée dans laquelle j'ai tout travaillé sauf rembobiner(). Le pseudocode pour ma dernière tentative était quelque chose comme ceci:
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
Cela ne fonctionne pas du tout et après quelques modifications que je réussi à obtenir la lecture de travailler jusqu'à ce que rewind() a été appelé alors essentiellement j'ai fait un tas de redondance code pour la troisième fois. Je me sens un peu frustré à ce stade puisque je n'ai jamais été bon avec les algorithmes et c'est pourquoi je viens à vous maintenant: S'il vous plaît aidez-moi à implémenter cela et/ou de me signaler la solution API Java native Je me sens perplexe parce que je n'arrive pas à faire fonctionner ça.
Pensez à rembobiner() de la même manière que reset() dans InputStreams; il déplace le marqueur (défini par mark()) vers un point spécifié dans le tampon et continue à lire les objets à partir de ce point alors que add(): s ajoute encore un nouvel objet à la fin de l'ensemble. – Esko