Visualizzazione post con etichetta ArrayList. Mostra tutti i post
Visualizzazione post con etichetta ArrayList. Mostra tutti i post

01 settembre 2009

Da ArrayList a vettore in Java

Mi capita spessisimo di dover integrare componenti scritte da me con vecchie componenti che utilizzano ancora semplici vettori.
Personalmente tendo ad usare spessissimo gli ArrayList, ma mi capita altrettanto spesso di dimenticare come convertire gli stessi in vettori.
Ecco come si fà :
(MyClass[]) mioArrayList.toArray(new MyClass[0])


Nel caso volessimo avere almeno un elemento per il vettore generato la sinstassi sarebbe la seguente :
(MyClass[]) mioArrayList.toArray(new MyClass[1])

12 dicembre 2008

Ordinare ArrayList in Java

In Java è indispensabile a volte dover ordinare collezioni di oggetti in maniera "custom". Se ad esempio avessimo un ArrayList di stringhe e volessimo ordinare tale collezione in ordine lessicologico, basterebbe richiamare il metodo : Collections.sort(arrayList);.
Tale operazione però su altri tipi di oggetti non funziona, poichè bisogna definire i criteri in base ai quali tale collezione andrebbe ordinata.

Ci sono 2 possibili approcci per la risoluzione di questo genere di problematiche.

Modificare la classe facendole implementare l'interfaccia Comparable
E' necessario che l'oggetto che inseriamo all'interno della collection implementi l'interfaccia Comparable e quindi bisogna definire il metodo compareTo che rappresenta il metodo richiamato dal Collections.sort per poter stabilire con quale criterio ordinare.
Vediamo un esempio :
public class MyClass implements Comparable {
public int ordine;
....
public int compareTo(Object o) {
if (o!=null){
MyClass objOfMyClass = (MyClass)o;
// qui ci arriva solo se i titoli sono uguali o un titolo è nullo quindi confronto i codici edizione
if (ordine>objOfMyClass.ordine){
return 1;
}else{
if (ordine==objOfMyClass.ordine){
return 0;
}
}
}
return -1;
}
}

Per poter ordinare L'ArrayList quindi basta richiamare il metodo:
List arrayList = new ArrayList ();
arrayList.add(myObj1);
arrayList.add(myObj2);
.....
Collections.sort(arrayList);


Creare una classe che implementa Comparator
Questo metodo necessita la creazione di una classe che funge da "Comparator" tra 2 oggetti. E' necessario quindi che tale classe implementi il metodo compare mediante cui il metodo Collection.sort riesce a stabilire l'ordine richiamandolo con i 2 oggetti che intende confrontare.
Vediamo un esempio :
public class OrderComparator implements Comparator {
public int compare(Object obj1, Object obj2) {
if (obj1!=null && obj1!=null){
MyClass objOfMyClass1 = (MyClass)obj1;
MyClass objOfMyClass2 = (MyClass)obj2;
if (objOfMyClass1.ordine>objOfMyClass2.ordine){
return 1;
}else{
if (objOfMyClass1.ordine==objOfMyClass2.ordine){
return 0;
}
}
}
return -1;
}
}

Per poter ordinare L'ArrayList quindi basta richiamare il metodo:
List arrayList = new ArrayList ();
arrayList.add(myObj1);
arrayList.add(myObj2);
.....
Collections.sort(arrayList,new OrderComparator () );

Naturalmente è possibile definire una serie di comparator da utilizzare quando e come si vuole, in maniera tale da poter avere a disposizione diversi criteri di ordinamento per uno stesso tipo di Classe.