/** * GrowingCircularArrayQueue * realizza il tipo di dati astratto Coda con un array circolare a * ridimensionamento dinamico * @author M. Dalpasso modificata da A. Luchetta * @version 20-Nov-2006 * @see FixedCircularArrayQueue */ public class GrowingCircularArrayQueue extends FixedCircularArrayQueue { /** inserisce un elemento all’ultimo posto della coda @param obj nuovo elemento da inserire */ public void enqueue(Object obj) { if (increment(back) == front) { v = resize(v, 2 * v.length); // se si ridimensiona l’array e la zona utile // della coda si trova attorno alla sua fine, // la seconda meta' del nuovo array rimane vuota // e provoca un malfunzionamento della coda, // che si risolve spostandovi la parte della // coda che si trova all’inizio dell’array if (back < front) { System.arraycopy(v, 0, v, v.length/2, back); back += v.length/2; } } super.enqueue(obj); } // ridimensiona l'array private static Object[] resize(Object[] a, int length) { int minLength = length; if (a.length < minLength) minLength = a.length; Object[] newArray = new Object[length]; System.arraycopy(a, 0, newArray, 0, minLength); return newArray; } }