Una operazione tipica che viene richiesta sulle collezioni é l'ordinamento. La collezione che abbiamo utilizzato prevalentemente in Head First Java é ArrayList, un array esteso di elementi non ordinati. Consideriamo un caso in cui siamo richiesti di leggere una serie di stringhe (titoli di brani musicali) e di presentarli in ordine alfabetico.
Abbiamo fondamentalmente un paio di alternative: o utilizziamo una collezione diversa, che mantenga i propri elementi in ordine, o applichiamo un ordinamento agli elementi della collezione.
La seconda alternativa é preferibile se la nostra collezione é tutto sommato statica, con pochi inserimenti. Se questo é il caso, possiamo utilizzare il metodo statico sort() della classe Collections per riorganizzare gli elementi come richiesto.
Vediamo un esempio:
package Chap16;
import java.util.*;
public class JukeBox {
private ArrayList<String> songs = new ArrayList<String>();
public JukeBox() {
getSongs();
System.out.println(songs);
Collections.sort(songs);
System.out.println(songs);
}
public static void main(String[] args) {
new JukeBox();
}
private void getSongs() {
// fake implementation
String[] fakeList = {"Pink Moon/Nick Drake", "Somersault/Zero 7",
"Shiva Moon/Prem Joshua", "Circles/BT (Brian Wayne Transeau)",
"Deep Channel/Afro Celts", "Passenger/Headmix", "Listen/Tahiti 80"};
for(String s : fakeList) {
System.out.println(s);
String[] tokens = s.split("/");
songs.add(tokens[0]);
}
}
}
Il metodo getSongs() simula la gestione dell'input da una fonte esterna di una lista di titoli e autori divisi dal carattere /. Qui ci interessano solo i titoli, facciamo dunque uno split di ogni stringa e prendiamo solo la prima parte per metterla nella collezione di canzoni.
Dopo aver caricato i brani eseguiamo una sort e vediamo come effettivamente l'operazione funzioni.
Nessun commento:
Posta un commento