PDA

View Full Version : [Java] banale problema con stack...


Maverick82^
11-11-2004, 16:19
raga in una struttura dati stack devo implementare un metodo che raddoppi la taglia dell'array, quando questo risulta essere pieno.
Ecco come l'ho implementato:

public void doubleSize() {
Object V1[] = new Object[V.length*2];
for (int i = 0; i < size(); i++) {
V1[i] = V[i];
}
V=V1;
V1=null;

}

dove V[] è l'array saturo e V1[] è un array che uso per spostare gli elementi di V[]. Ho l'impressione che non sia una soluzione ottimale, se potete cacciare qualcosa di meglio dal vostro cilindro mi fareste un piacere ;)

thanks

recoil
11-11-2004, 23:02
sei obbligato a usare gli array? raddoppiare ogni volta non è una gran soluzione

il problema è che perdi tempo a copiare ogni volta l'array vecchio in quello nuovo allargato. non vedo molte soluzioni, se non quella di usare un'altra struttura dati

Maverick82^
11-11-2004, 23:45
si purtroppo posso usare solo l'array, è una limitazione dell'esercizio. Il cacchio di guaio è che il tempo di esecuzione è proporzionale alla dimensione dell'array :eek:

Blackat
12-11-2004, 07:58
Per fare la copia dell'array puoi utilizzare la funzione System.arraycopy(...),
che e' una funzione nativa di Java.
In teoria dovrebbe andare leggermente piu' veloce.
Puoi trovare la sintassi completa all'indirizzo Manuale Java (http://java.sun.com/j2se/1.4.2/docs/api/java/lang/System.html#arraycopy(java.lang.Object,%20int,%20java.lang.Object,%20int,%20int))

Ciao

71103
12-11-2004, 13:10
IMHO la soluzione migliore è proprio quella che hai usato tu, poi non conosco la funzione System.arraycopy, quindi non ti so dire; se il testo dell'esercizio non impone limiti di memoria, puoi creare un array molto grande fin dall'inizio, ad es. da 16 kilobytes, poi scegli tu l'ordine di grandezza.

P.S.: il "V1 = null;" finale non serve.