traduccion spanish google fruta examples java collections guava apache-commons

java - spanish - guava maven



¿Hay una Guava equivalente a Apache Commons CircularFifoBuffer? (4)

No veo nada parecido en Guava, pero ¿qué tal un ForwardingQueue construido en torno a un ArrayDeque donde se verifica la capacidad en add() , offer() , etc. y remove() entradas antiguas si ya está lleno?

Necesito una estructura de datos que pueda almacenar eficientemente una cantidad específica de elementos, en orden FIFO.

Como se menciona en esta pregunta , Apache Commons tiene un CircularFifoBuffer, pero lamentablemente no está genérico. Algunas horquillas existen, pero no estoy seguro de su estado de mantenimiento.

Como Guava es la biblioteca de referencia para mis necesidades de recolección, me pregunto: ¿hay una buena alternativa en Guava? Si no, ¿debería implementarlo en mi proyecto, basado en Apache Commons ''CircularFifoBuffer?



Commons-Collections with Generics ( enlace de maven ) es el camino a seguir si quiere utilizar Apache Collections con genéricos (y contiene una clase CircularFifoBuffer<E> activa).

Por otro lado, como dice @FrankPavageau, puede usar su propia implementación de ForwardingQueue . Un enfoque ingenuo (con lugar para futuras optimizaciones) sería algo como esto:

static class BoundedQueue<E> extends ForwardingQueue<E> { private final Queue<E> delegate; private final int capacity; public BoundedQueue(final int capacity) { this.delegate = new ArrayDeque<E>(capacity); // specifying initial capacity is optional this.capacity = capacity; } @Override protected Queue<E> delegate() { return delegate; } @Override public boolean add(final E element) { if (size() >= capacity) { delegate.poll(); } return delegate.add(element); } @Override public boolean addAll(final Collection<? extends E> collection) { return standardAddAll(collection); } @Override public boolean offer(final E o) { return standardOffer(o); } }

Uso:

final BoundedQueue<Integer> boundedQueue = new BoundedQueue<Integer>(3); boundedQueue.add(1); System.out.println(boundedQueue); // [1] boundedQueue.add(2); System.out.println(boundedQueue); // [1, 2] boundedQueue.add(3); System.out.println(boundedQueue); // [1, 2, 3] boundedQueue.add(4); System.out.println(boundedQueue); // [2, 3, 4] boundedQueue.addAll(Arrays.asList(5, 6, 7, 8)); System.out.println(boundedQueue); // [6, 7, 8] ((Queue<Integer>) boundedQueue).offer(9); System.out.println(boundedQueue); // [7, 8, 9]