|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Apr 2004
Città: Ascoli Piceno
Messaggi: 742
|
[JAVA] Ordinamento vettore e copia elementi
Ho un Vector di oggetti di tipo Tree da me definiti: se volessi ordinarli in ordine crescente prendendo come riferimento un parametro interno ad oggetti di tale tipo cosa dovrei usare?
So che esiste la libreria java.util.Collections che presenta un metodo sort dichiarato di questo tipo: Codice:
sort public static <T> void sort(List<T> list, Comparator<? super T> c) Sorts the specified list according to the order induced by the specified comparator. All elements in the list must be mutually comparable using the specified comparator (that is, c.compare(e1, e2) must not throw a ClassCastException for any elements e1 and e2 in the list). This sort is guaranteed to be stable: equal elements will not be reordered as a result of the sort. The sorting algorithm is a modified mergesort (in which the merge is omitted if the highest element in the low sublist is less than the lowest element in the high sublist). This algorithm offers guaranteed n log(n) performance. The specified list must be modifiable, but need not be resizable. This implementation dumps the specified list into an array, sorts the array, and iterates over the list resetting each element from the corresponding position in the array. This avoids the n2 log(n) performance that would result from attempting to sort a linked list in place. Parameters: list - the list to be sorted. c - the comparator to determine the order of the list. A null value indicates that the elements' natural ordering should be used. Throws: ClassCastException - if the list contains elements that are not mutually comparable using the specified comparator. UnsupportedOperationException - if the specified list's list-iterator does not support the set operation. See Also: Comparator --------------------------------------------------------------------------------
__________________
Toshiba Satellite A500-14F : Intel® Core™2 Duo P8700; ATI Mobility Radeon™ HD 4650; TruBrite® HD TFT High Brightness display 16.0"; 4,096 MB DDR2 RAM; HD 320 GB; Wi-Fi+BT 802.11a/g/Draft-N; Built-in Harman Kardon® stereo speakers; Touch Pad with Multi-Touch Control; TV Tuner ibrido digitale (DVB-T) e analogico; DVD Super Multi drive; Windows 7 Professional Ultima modifica di f0/\/2!3 : 17-01-2008 alle 11:37. |
![]() |
![]() |
![]() |
#2 | |
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Nel primo caso sort() si basa su Comparable, che deve essere implementato nella classe dei tuoi elementi. Nel secondo caso sort() si basa su Comparator, una interfaccia che devi implementare in una qualunque altra classe apposita per definire un ordinamento particolare. Es.: Codice:
public class MyTreeComp implements Comparator<Tree> { public int compare (Tree t1, Tree t2) { // ... qui compara t1 e t2 secondo il criterio che vuoi .... } } Codice:
Collections.sort (tuoVector, new MyTreeComp());
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
![]() |
![]() |
![]() |
#3 | |
Senior Member
Iscritto dal: Apr 2004
Città: Ascoli Piceno
Messaggi: 742
|
Quote:
![]()
__________________
Toshiba Satellite A500-14F : Intel® Core™2 Duo P8700; ATI Mobility Radeon™ HD 4650; TruBrite® HD TFT High Brightness display 16.0"; 4,096 MB DDR2 RAM; HD 320 GB; Wi-Fi+BT 802.11a/g/Draft-N; Built-in Harman Kardon® stereo speakers; Touch Pad with Multi-Touch Control; TV Tuner ibrido digitale (DVB-T) e analogico; DVD Super Multi drive; Windows 7 Professional |
|
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Apr 2004
Città: Ascoli Piceno
Messaggi: 742
|
Ho due vettori e devo copiare un oggetto da un vettore all'altro, solo che l'oggetto copiato è lo stesso ovvero da debug noto che presenta lo stesso ID quindi ogni modifica effettuata sull'elemento interno al nuovo vettore influisce anche sull'originale... Come si può risolvere?
__________________
Toshiba Satellite A500-14F : Intel® Core™2 Duo P8700; ATI Mobility Radeon™ HD 4650; TruBrite® HD TFT High Brightness display 16.0"; 4,096 MB DDR2 RAM; HD 320 GB; Wi-Fi+BT 802.11a/g/Draft-N; Built-in Harman Kardon® stereo speakers; Touch Pad with Multi-Touch Control; TV Tuner ibrido digitale (DVB-T) e analogico; DVD Super Multi drive; Windows 7 Professional |
![]() |
![]() |
![]() |
#5 | |
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Ma in ogni caso è necessario conoscere come è fatta la classe e quali campi contiene.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Se stai facendo una cosa di questo tipo:
Codice:
// primoVettore è il vettore che hai già popolato, da cui vuoi copiare gli oggetti Vector secondoVettore = new Vector(); for(int i = 0; i < primoVettore.size(); i++) { secondoVettore.add( primoVettore.elementAt(i) ); } Una cosa del tipo: Codice:
// primoVettore è il vettore che hai già popolato, da cui vuoi copiare/clonare gli oggetti Vector secondoVettore = new Vector(); for(int i = 0; i < primoVettore.size(); i++) { // recupera riferimento ad oggetto originale Elemento originale = (Elemento) primoVettore.elementAt(i); // clona l'oggetto Elemento nuovaCopia = metodoCheClona(originale); // inserisci nel nuovo vettore il riferimento al nuovo oggetto copia // dell'originale secondoVettore.add( nuovaCopia); } Ciao ![]() @EDIT: scusa andbin, non avevo ancora letto il tuo post. |
![]() |
![]() |
![]() |
#7 |
Senior Member
Iscritto dal: Apr 2004
Città: Ascoli Piceno
Messaggi: 742
|
grazie a tutti delle risposte ragazzi: ho usato un oggetto new in cui ho copiato le proprietà ed ho risolto per ora... Poi vediamo se alla fine mi da problemi
![]()
__________________
Toshiba Satellite A500-14F : Intel® Core™2 Duo P8700; ATI Mobility Radeon™ HD 4650; TruBrite® HD TFT High Brightness display 16.0"; 4,096 MB DDR2 RAM; HD 320 GB; Wi-Fi+BT 802.11a/g/Draft-N; Built-in Harman Kardon® stereo speakers; Touch Pad with Multi-Touch Control; TV Tuner ibrido digitale (DVB-T) e analogico; DVD Super Multi drive; Windows 7 Professional |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 17:55.