Newsgroup: it.comp.java
Titolo: Vector: removeElementAt

Ho un problema (probabilmente stupido) che non riesco a risolvere: il
metodo removeElementAt(int i) non mi funziona, ovvero non rimuove
affatto l'elemento voluto. ho provato anche con get() ma nulla,
nemmeno questo mi elimina l'elemento dal vettore. dove sbaglio? in
pratica quello che devo fare e' eliminare un elemento da un vettore
conoscendone la sua posizione. posto anche un esempio banale di cio'
che faccio:
public static Vector v = new Vector(1,1);
Object obj1 = new Integer (1);
Object obj2 = new Integer (2);
System.out.println(v.capacity()); //qui mi aspetto capacita' 1, ok
v.addElement(obj1);
System.out.println(v.capacity()); //qui mi aspetto capacita' 1, ok
v.addElement(obj2);
System.out.println(v.capacity()); //qui mi aspetto capacita' 2, ok
v.removeElementAt(1);
System.out.println(v.capacity());
ebbene alla fine mi aspetto che la capacita' sia diminuita, e invece
ottengo sempre 2 (infatti l'elemento continua ad esserci nel
vettore)!! chi mi sa aiutare? grazie


wrote:

perche' ti aspetti che diminuisca la capacita'?
un vector cambia la sua capacita' quando occorre 
la capacita' non indica il numero di elementi contenuti nel vector [usa size()]
ciao_O
_______________________________________
http://jame.sourceforge.net
 
[ last release jame4.1b ]
_______________________________________
http://digilander.iol.it/schiele

 vettore)!! chi mi sa aiutare? grazie
Se provi a fare  System.out.println(v.size()) otterrai 1 e non 2. Il metodo
capacity() ritorna la capacità del vettore, non il numero di elementi che
contiene. Personalemente non ho mai utilizzato questo metodo ma così è
riportato sulla documentazione. Può darsi che la capacità di un vector sia
pari al massimo numero di elementi che ha contenuto.
Scorpio.

pari al massimo numero di elementi che ha contenuto.
un Vector e' un vettore con dimensione variabile
la capacita' e' la dimensione del "vettore interno" 
la capacita' cambia quando il "vettore interno" viene riallocato
ho scritto "vettore interno" perche' e' una mia ipotesi
anche se mi sembra di averlo letto da qualche parte...


la capacita' non indica il numero di elementi contenuti nel vector [usa size()]
ok, ma per eliminare un oggetto contenuto nel vettore? io devo poter
eliminare un oggetto in esso contenuto e che si trova in una posizione
determinata. ho provato con il metodo che ti ho detto ma l'oggetto non
viene eliminato...


viene eliminato...
sicuro che non venga rimosso?
public void removeElementAt(int index)
Deletes the component at the specified index. Each component in this vector with an index greater or
equal to the specified index is shifted downward to have an index one smaller than the value it had
previously. The size of this vector is decreased by 1.
The index must be a value greater than or equal to 0 and less than the current size of the vector. 


ho perso del tempo sui vector:
si, c'è un vettore interno che si riadatta e puo' essere + grande del numero
di elemnti dato da size()... è un modo x ottimizzare l'allocazione
dinamica.... io avevo implemetato una lista doppiamente puntata ma m isono
reso conto che il gioco nn vale la candela: vector, dopo aver spulciato il
suo codice, misembra ben fatto ( e sincronizzato!)
ciao ng

intanto stai attento che i vettori cominciato come gli array da 0
comunque la capacita' non dimunuisce eliminando gli elementi
la capacita' del vettore per motivi di ottimizzazione e' almeno tanto 
grande quanto gli elementi contenuti.
Inoltre tu hai settato anche un incremento di capacita' di uno.Cioe' non 
appena inserisci un elemento lui' incrementa la sua capacita' di uno
ma non e' lo stesso quando lo cancelli.
se usi il metodo trimToSize ti accorgerai che a quel punto la capacita' 
corrisponde al numero di elementi.


In 
3B6BCC8B...@e-tna.it
, Luca Valenti, 
l.va...@e-tna.it
, il 4-08-2001
10:20 ha scritto:

Devo dire che su Mac (non OS X, ma OS9) non mi pare che funzionino così le
cose: eliminando un elemento dal vettore questo riduce la sua capacità: io
ho l'implementazione 1.1.8 Sono forse cambiate le cose con la 2?
Ciao

 intanto stai attento che i vettori cominciato come gli array da 0

AHHHH!! Il caldo torrido e l'ora tarda nel mio precedente post si è fatto
sentire: qui l'errore è che l'amico per determinare la "capacità" del
vettore ha usato capacity(), ma per ottenere il numero di elementi effettivi
devi usare size(): capacity è in effetti un valore interno che da la
dimensione del Vector disponibile.
Quindi, invece di usare capacity() + trimToSize() conviene usare
direttamente size().
E dunque anche su Mac tutto funziona come da spcifiche.
Scusate il mio precedente post ma ero fuso.
Ciao,
Edoardo