Ordinare un array di oggetti coi metodi sort

  • Slides: 14
Download presentation
Ordinare un array di oggetti coi metodi sort() della classe Arrays

Ordinare un array di oggetti coi metodi sort() della classe Arrays

Interface Comparable Volendo usare il metodo dalle classe Arrays, dobbiamo predisporre che la classe

Interface Comparable Volendo usare il metodo dalle classe Arrays, dobbiamo predisporre che la classe Persona “possieda” un criterio di ordinamento che renda ogni suo oggetto confrontabile si userà Comparable che rappresenta l’interfaccia standard per definire un criterio di ordinamento naturale in Java. Presente nella libreria standard java. lang, Comparable<T> consente di ordinare gli oggetti di una classe. In particolare con l’implementazione del metodo compare. To(T o)

La classe Persona

La classe Persona

Segmento di codice: class Persona public class Persona implements Comparable <Persona>{ . . .

Segmento di codice: class Persona public class Persona implements Comparable <Persona>{ . . . /** * Implemento l'ordinamento in base * al cognome e, come secondo criterio, in base al nome */ public int compare. To (Persona p) { // unico metodo // di ordinamento naturale // cioè definito nella classe // quindi proprio di ogni oggetto int last. Cmp = cognome. compare. To (p. get. Cognome()); } return (last. Cmp!=0 ? last. Cmp : nome. compare. To (p. get. Nome())); }

// … alcuni metodi di accesso public double get. Cognome(){ return cognome; } public

// … alcuni metodi di accesso public double get. Cognome(){ return cognome; } public char get. Nome(){ return nome; } i d o Met ti di t ogge o tip a n o s Per // ridefinizione del metodo to. String public String to. String() { return ( cognome + " " + nome) ; } } // fine class Sacco Restituisce una rappresentazione testuale dell'oggetto in forma di stringa: è molto utile ad esempio per le stampe.

Classe per altro ordinamento

Classe per altro ordinamento

Interface Comparator Volendo usare il metodo dalle classe Arrays, dobbiamo creare una classe che

Interface Comparator Volendo usare il metodo dalle classe Arrays, dobbiamo creare una classe che può definire altri modi di confronto tra oggetti dello stesso tipo à si userà Comparator che rappresenta l’interfaccia per rendere oggetti mutuamente confrontabili in Java. Presente nella libreria java. util, Comparator<T> consente di ordinare, confrontandoli tra loro, due oggetti dello stesso tipo. In particolare con l’implementazione del metodo compare (T o 1, T o 2)

Volendo altro ordinamento: la classe Compara. Per. Nome import java. util. *; public class

Volendo altro ordinamento: la classe Compara. Per. Nome import java. util. *; public class Compara. Per. Nome implements Comparator <Persona>{ public int compare (Persona a, Persona b){ // solo per nome String nome_1 = a. get. Nome(); String nome_2 = b. get. Nome(); return (nome_1. compare. To (nome_2)); } }// fine class

Progettiamo la classe che usa array di oggetti di tipo Persona …

Progettiamo la classe che usa array di oggetti di tipo Persona …

… volendo ordinare 1. secondo l'ordine naturale Arrays. sort (persone); 2. con uso di

… volendo ordinare 1. secondo l'ordine naturale Arrays. sort (persone); 2. con uso di altra classe Comparator Arrays. sort (persone, new Compara. Per. Nome());

Applicazione che usa array di oggetti public class Test. Confronto { private Persona persone[];

Applicazione che usa array di oggetti public class Test. Confronto { private Persona persone[]; private final int N=3; public Test. Confronto(){ persone = new Persona [N]; } tti e g g o o s U o p i t i d na o s r Pe public void ordina 1(){ // ordino secondo l'ordine naturale Arrays. sort (persone); } public void ordina 2(){ //ordino in un altro modo con uso Comparator } Arrays. sort (persone, new Compara. Per. Nome() ); …

… continua public void ini(){ // riempio l'array con oggetti di tipo Persona persone[0]

… continua public void ini(){ // riempio l'array con oggetti di tipo Persona persone[0] = new Persona("Paola", "Bisetti"); persone[1] = new Persona("Maria", "Costa"); // cognome // alfabeticamente " max" persone[2] = new Persona("Anna", "Ammirati"); } public void stampa(){ for (int i=0; i<persone. length; i++) System. out. println(persone[i]. to. String()); } …

main public static void main(String[] args) { Test. Confronto o = new Test. Confronto();

main public static void main(String[] args) { Test. Confronto o = new Test. Confronto(); o. ini(); // inizializza array di oggetti tipo Persona o. ordina 1(); System. out. println("nn. Elenco alfabetico"); o. stampa(); o. ordina 2(); System. out. println("nn. Elenco con ordinamento per nome"); o. stampa(); } } // fine applicazione

Definizioni Un metodo astratto è un metodo senza corpo, con un "; " dopo

Definizioni Un metodo astratto è un metodo senza corpo, con un "; " dopo l'intestazione. Una interfaccia (interface) in Java ha una struttura simile a una classe, ma dichiara SOLO metodi d'istanza astratti e costanti (attributi static final) quindi non può contenere costruttori, variabili e metodi statici. Si può dichiarare che una classe implementa (implements) una data interfaccia: in questo caso deve realizzare (implementare) tutti i suoi metodi astratti. Le interfacce possono essere utilizzate: • come contratto tra chi implementa una classe e chi la usa: le due parti possono essere sviluppate e compilate separatamente • per evidenziare funzionalità comuni a più classi, sopperendo alle limitazioni dell'ereditarietà singola (come nell'esempio di Comparable) Tratto da risorsa online >> Interface in Java