Posta os fontes das classes LSEC e LSENode.
Qualquer coisa, também tenho um exemplo de lista circular:
import java.util.Arrays;
@SuppressWarnings("unchecked")
public class CircularBuffer<T> {
private int direction = +1;
private int index;
private int size;
private final Object[] elements;
public CircularBuffer(int capacity) {
elements = new Object[capacity];
index = capacity - 1;
}
public CircularBuffer<T> add(T element) {
next();
elements[index] = element;
size++;
size=Math.min(size, elements.length);
return this;
}
@Override
public boolean equals(Object obj) {
if (obj instanceof CircularBuffer<?>) {
CircularBuffer<?> that = (CircularBuffer<?>) obj;
return Arrays.equals(this.elements, that.elements);
}
return false;
}
public T get(int index) {
return (T) elements[index];
}
@Override
public int hashCode() {
return Arrays.hashCode(elements);
}
public CircularBuffer<T> left() {
direction = -1;
return this;
}
public T remove(T element) {
for (int i = 0; i < elements.length; i++) {
if (element.equals(elements[i])) {
return removeAt(i);
}
}
return null;
}
public T removeAt(int index) {
T object = (T) elements[index];
elements[index] = null;
size--;
previous();
return object;
}
public CircularBuffer<T> right() {
direction = +1;
return this;
}
public int size() {
return size;
}
@Override
public String toString() {
return getClass().getSimpleName() + " (" + size() + " / " + elements.length + ") " + Arrays.toString(elements).replace("null", "");
}
private void next() {
index = (index + elements.length + direction) % elements.length;
}
private void previous() {
direction *= -1;
next();
direction *= -1;
}
}
Programa para exemplificar o uso:
public class Exemplo {
public static void main(String[] args) {
CircularBuffer<Integer> circularBuffer = new CircularBuffer<Integer>(10);
System.out.println("vazio");
System.out.println(circularBuffer);
System.out.println();
System.out.println("adicionando itens à direita");
circularBuffer.right();
System.out.println(circularBuffer.add(1));
System.out.println(circularBuffer.add(2));
System.out.println(circularBuffer.add(3));
System.out.println(circularBuffer.add(4));
System.out.println(circularBuffer.add(5));
System.out.println(circularBuffer.add(6));
System.out.println(circularBuffer.add(7));
System.out.println(circularBuffer.add(8));
System.out.println(circularBuffer.add(9));
System.out.println(circularBuffer.add(10));
System.out.println(circularBuffer.add(11));
System.out.println(circularBuffer.add(12));
System.out.println(circularBuffer.add(13));
System.out.println(circularBuffer.add(14));
System.out.println(circularBuffer.add(15));
System.out.println();
System.out.println("adicionando itens à esquerda");
circularBuffer.left();
System.out.println(circularBuffer.add(16));
System.out.println(circularBuffer.add(17));
System.out.println(circularBuffer.add(18));
System.out.println(circularBuffer.add(19));
System.out.println(circularBuffer.add(20));
System.out.println(circularBuffer.add(21));
System.out.println(circularBuffer.add(22));
System.out.println(circularBuffer.add(23));
System.out.println(circularBuffer.add(24));
System.out.println(circularBuffer.add(25));
System.out.println();
System.out.println("removendo itens");
circularBuffer.remove(16);
System.out.println(circularBuffer);
circularBuffer.remove(17);
System.out.println(circularBuffer);
circularBuffer.remove(18);
System.out.println(circularBuffer);
circularBuffer.remove(19);
System.out.println(circularBuffer);
circularBuffer.remove(20);
System.out.println(circularBuffer);
circularBuffer.remove(21);
System.out.println(circularBuffer);
circularBuffer.remove(22);
System.out.println(circularBuffer);
circularBuffer.remove(23);
System.out.println(circularBuffer);
circularBuffer.remove(24);
System.out.println(circularBuffer);
circularBuffer.remove(25);
System.out.println(circularBuffer);
}
}
Saída do programa:
vazio
CircularBuffer (0 / 10) [, , , , , , , , , ]
adicionando itens à direita
CircularBuffer (1 / 10) [1, , , , , , , , , ]
CircularBuffer (2 / 10) [1, 2, , , , , , , , ]
CircularBuffer (3 / 10) [1, 2, 3, , , , , , , ]
CircularBuffer (4 / 10) [1, 2, 3, 4, , , , , , ]
CircularBuffer (5 / 10) [1, 2, 3, 4, 5, , , , , ]
CircularBuffer (6 / 10) [1, 2, 3, 4, 5, 6, , , , ]
CircularBuffer (7 / 10) [1, 2, 3, 4, 5, 6, 7, , , ]
CircularBuffer (8 / 10) [1, 2, 3, 4, 5, 6, 7, 8, , ]
CircularBuffer (9 / 10) [1, 2, 3, 4, 5, 6, 7, 8, 9, ]
CircularBuffer (10 / 10) [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
CircularBuffer (10 / 10) [11, 2, 3, 4, 5, 6, 7, 8, 9, 10]
CircularBuffer (10 / 10) [11, 12, 3, 4, 5, 6, 7, 8, 9, 10]
CircularBuffer (10 / 10) [11, 12, 13, 4, 5, 6, 7, 8, 9, 10]
CircularBuffer (10 / 10) [11, 12, 13, 14, 5, 6, 7, 8, 9, 10]
CircularBuffer (10 / 10) [11, 12, 13, 14, 15, 6, 7, 8, 9, 10]
adicionando itens à esquerda
CircularBuffer (10 / 10) [11, 12, 13, 16, 15, 6, 7, 8, 9, 10]
CircularBuffer (10 / 10) [11, 12, 17, 16, 15, 6, 7, 8, 9, 10]
CircularBuffer (10 / 10) [11, 18, 17, 16, 15, 6, 7, 8, 9, 10]
CircularBuffer (10 / 10) [19, 18, 17, 16, 15, 6, 7, 8, 9, 10]
CircularBuffer (10 / 10) [19, 18, 17, 16, 15, 6, 7, 8, 9, 20]
CircularBuffer (10 / 10) [19, 18, 17, 16, 15, 6, 7, 8, 21, 20]
CircularBuffer (10 / 10) [19, 18, 17, 16, 15, 6, 7, 22, 21, 20]
CircularBuffer (10 / 10) [19, 18, 17, 16, 15, 6, 23, 22, 21, 20]
CircularBuffer (10 / 10) [19, 18, 17, 16, 15, 24, 23, 22, 21, 20]
CircularBuffer (10 / 10) [19, 18, 17, 16, 25, 24, 23, 22, 21, 20]
removendo itens
CircularBuffer (9 / 10) [19, 18, 17, , 25, 24, 23, 22, 21, 20]
CircularBuffer (8 / 10) [19, 18, , , 25, 24, 23, 22, 21, 20]
CircularBuffer (7 / 10) [19, , , , 25, 24, 23, 22, 21, 20]
CircularBuffer (6 / 10) [, , , , 25, 24, 23, 22, 21, 20]
CircularBuffer (5 / 10) [, , , , 25, 24, 23, 22, 21, ]
CircularBuffer (4 / 10) [, , , , 25, 24, 23, 22, , ]
CircularBuffer (3 / 10) [, , , , 25, 24, 23, , , ]
CircularBuffer (2 / 10) [, , , , 25, 24, , , , ]
CircularBuffer (1 / 10) [, , , , 25, , , , , ]
CircularBuffer (0 / 10) [, , , , , , , , , ]