La domanda sarà banale ma quando è consigliabile utilizzare una Lista piuttosto che un Vector e viceversa?
La domanda sarà banale ma quando è consigliabile utilizzare una Lista piuttosto che un Vector e viceversa?
Per Java c'e' un forum apposito ...
No MP tecnici (non rispondo nemmeno!), usa il forum.
Sì lo so.. ho sbagliato a postare ed ho anche già contatto un moderatore per farla spostare.
Per lista intendi ArrayList??Originariamente inviato da Pacio88
La domanda sarà banale ma quando è consigliabile utilizzare una Lista piuttosto che un Vector e viceversa?
Le classi ArrayList e Vector sono entrambe implementazioni concrete della interfaccia List. Concettualmente fanno la stessa identica cosa, cioè una collezione che contiene una sequenza ordinata di elementi ed entrambe sono basate internamente su un array.
Ci sono alcune differenze "tecniche":
- Vector ha i metodi synchronized, ArrayList no
- Vector è una collezione "legacy" mantenuta ovviamente per compatibilità. È più "vecchia" rispetto ad ArrayList e ha dei metodi in più come elementAt(), removeAllElements() (e altri) che non sono inerenti alla interfaccia List
- Quando l'array interno non è più sufficiente, viene istanziato un nuovo array più grande. Per Vector è generalmente 2 volte più grande, per ArrayList è 1,5 volte più grande.
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
Sì scusami per List intendevo appunto ArrayList.
Ti ringrazio per la spiegazione tuttavia non ho molto capito cosa intendi dire quando affermi che Vector è una collezione "legacy".
"legacy": legato, lascito; eredità: to leave a -, fare un legato, lasciare in eredità; - duty, imposta di successioneOriginariamente inviato da Pacio88
non ho molto capito cosa intendi dire quando affermi che Vector è una collezione "legacy".
Insomma .. Vector (come Hashtable) è stato presente fin dal principio, già dal JDK 1.0. Poi con il JDK 1.2 è stato introdotto quello che si chiama "Collections Framework", che ha fornito le interfacce List, Map, ecc... e le varie implementazioni concrete ArrayList, HashMap, ecc...
Beh .. Vector è ancora lì ... non ci pensano minimamente a eliminarlo! Nonostante abbia una API che differisce un pochino da ArrayList (quanto ho detto prima) ed è synchronized. Hanno solo fatto un "retrofit" per fare in modo che Vector implementi List.
Se sviluppi cose nuove, meglio ArrayList (e se ne vuoi ottenere la versione synchronized puoi ottenerla tramite "wrapping" usando Collections.synchronizedList() ). Se devi avere a che fare con API che richiedono Vector, beh ok. Ad esempio il JList di Swing ha un costruttore che riceve un Vector.
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet