Data la classe Persona dell`esercitazione 2, definire un ordinamento

Esercitazione 4: Data la classe Persona dell’esercitazione 2, definire un ordinamento naturale in
base all’età (confrontare le date di nascita, sfruttando il compareTo() della classe java.util.Date).
Per la classe Persona definire anche due ordinamenti aggiuntivi, mediante due nested inner classes
di tipo Comparator. Il primo ordinamento è LexicographicalOrder che ordina le persone in base al
cognome e, a parità di cognome, in base al nome. Il secondo ordinamento aggiuntivo è
ShortestFullNameOrder che ordina le persone in base al numero complessivo di caratteri del
cognome e del nome (è “minore” la persona che ha un numero minore complessivo di caratteri tra
nome e cognome).
La classe Studente eredita gli ordinamenti definiti per la classe Persona e in aggiunta introduce un
ordinamento mediante un Comparator chiamato theYoungerTheBetter che ordina gli studenti in
base all’età e a parità d’età li ordina in base al numero di matricola.
 Testare gli ordinamenti creando una lista di Persona e una lista di Studenti (usando le liste
delle API di Java) ed effettuare gli ordinamenti utilizzando il metodo
Collections.sort(List<T> list, Comparator<? super T> c).
 Dopo aver ridefinito il tipo base di MyLinkedList (e analogamente di MyArrayList) in
Persona oppure in Studente, definire un metodo nella classe MyLinkedList (e
analogamente in MyArrayList) chiamato sort che implementa l’ordinamento naturale
della lista (richiamando il compareTo() degli oggetti di cui la lista è composta). Ad
esempio:
MyList lista = new MyLinkedList();
lista.add(new Persona("Maria", "De Zen", "31/02/1970"));
lista.add(new Persona("Piero", "Angela", "23/02/1935"));
//altri add…
lista.sort();//ordina la lista in base all’ordinamento
naturale – la lista di partenza è ordinata
 Definire un metodo nella classe MyLinkedList (e analogamente in MyArrayList) chiamato
sort(Comparator<T>
c) che accetta in input un oggetto di tipo
Comparator<Persona> che permette di usare gli ordinamenti aggiuntivi
LexicographicalOrder e ShortestFullNameOrder. Ad esempio:
lista.sort(new Persona.LexicographicalOrder()); //ordina la
lista usando l’ordinamento lessicografico
Nota: per implementare l’algoritmo di ordinamento utilizzare uno degli algoritmi di
ordinamento visti negli anni presedenti (ad esempio: insertion sort, bubble sort, etc.). Ad
esempio, nei seguenti link si trovano esempi di utilizzo di compareTo() e di Comparator
per implementare algoritmi di ordinamento:
https://www.daniweb.com/programming/software-development/threads/347069/insertionsort-method-using-comparable-array
http://www.cs.uofs.edu/~mccloske/courses/cmps144/java_comparator_sorting.html