Ho sviluppato una coda Immutable in java, ma la versione che ho sviluppato è presumibilmente lenta e mi è stato suggerito di creare una versione più veloce della stessa e non ho idea di come ottenerlo.
import java.util.ArrayList;
import java.util.List;
import java.util.NoSuchElementException;
public class ImmutableQueueImpl<E> implements ImmutableQueue<E>
{
private List<E> queue;
public ImmutableQueueImpl()
{
queue=new ArrayList<E>();
}
public ImmutableQueueImpl(List<E> queue)
{
this.queue=queue;
}
public ImmutableQueue<E> enqueue(E e)
{
if(e==null) throw new IllegalArgumentException();
List<E> clone = new ArrayList<E>(queue);
clone.add(e);
return new ImmutableQueueImpl<E>(clone);
}
public ImmutableQueue<E> dequeue()
{
if(queue.isEmpty())
{
throw new NoSuchElementException();
}
List<E> clone = new ArrayList<E>(queue);
clone.remove(0);
return new ImmutableQueueImpl<E>(clone);
}
public E peek()
{
if(queue.isEmpty()) throw new NoSuchElementException();
return queue.get(0);
}
public int size()
{
return queue.size();
}
}
Suggerisci eventuali miglioramenti all'implementazione o alle librerie utilizzate.
Rimuoviamo elementi da elenchi immutabili tutto il tempo e dequeue è solo un caso speciale di questo. Il punto è che il risultato non è realmente l'elemento, ma un altro elenco immutabile senza di esso. Il punto di questo disegno è la sicurezza delle mutazioni e il modo migliore nelle impostazioni in parallelo rispetto alle strutture di dati mutevoli.