Forum Informatica Unict

LAUREA TRIENNALE (D.M. 270/04) => Programmazione 2, 9 CFU => Topic started by: thomas89 on 15-04-2009, 19:00:11



Title: Ordinare oggetti di tipo Object
Post by: thomas89 on 15-04-2009, 19:00:11
Come da topic, la mia domanda è come fare ad Ordinare oppure fare l'inserimento ordinato in lista se si lavora cn oggetti generici di tipo Object? xkè mi dice ke (giustamente) nn è possibile utilizzare gli operatori "<", ">", ecc..




ps: ho letto in alcuni topic l'utilizzo del "(Comparable)".. ma preammetto ke nn l'ho capito..
inoltre nelle slide del prof x le operazioni di inserimento testa, coda ed ordinato, lui usa l'"int" come valore del nodo.. quindi è fin troppo semplice utilizzare i normali operatori   .sisi..

spero di avervi spiegato il mio problema nel miglior modo possibile   :-)|


Title: Re:Ordinare oggetti di tipo Object
Post by: thomas89 on 15-04-2009, 19:55:18
*


Title: Re:Ordinare oggetti di tipo Object
Post by: Aigor on 15-04-2009, 20:05:01

In pratica dovresti implementare un'interfaccia Comparable e fare un overload della compareTo, modificandola secondo le tue esigenze.


Title: Re:Ordinare oggetti di tipo Object
Post by: thomas89 on 15-04-2009, 21:44:57
qlkn mi potrebbe far vedere un esempio, un pezzo di codice.. qlks cosa  :pray


Title: Re:Ordinare oggetti di tipo Object
Post by: Eleirgab on 15-04-2009, 23:03:50
Prima di tutto devi creare un'interfaccia, ad esempio:
Code:
interface Comparable {
int compareTo(Object a);
boolean equals(Object a);
}
Quando crei il tuo oggetto da inserire in lista, devi implementare i metodi dichiarati nell'interfaccia e segnalare che il tuo oggetto la implementa, così:
Code:
class Oggetto implements Comparable {
TIPO valore;
public Oggetto (TIPO a) {
valore = a;
}
public TIPO getValore() {
return valore;
}

public String toString() {
return ""+this.getValore();
}
public boolean equals(Object x) { //Implementa un metodo per effettuare l'uguaglianza, questo esempio andava con gli int
if (((Oggetto)this).getValore() == ((Oggetto)x).getValore()) 
return true;
return false;
}
public int compareTo(Object  x) { //Stessa cosa per il compareTo
return ((Oggetto)x).getValore() - ((Oggetto)this).getValore();
}
}

Fattom questo devi trattare gli oggetti inseriti nella tua lista come se appartenessero ad una classe chiamata Comparable.

Es.
Code:
public void insert(Comparable key) {
[....]
for (; aux!=null; aux=aux.getNext() )
if(aux.getInfo().compareTo(key)<0) {
aux.setPrev(new DNode(key, aux.getPrev(), aux));
aux.getPrev().getPrev().setNext(aux.getPrev());
return;
}

Ricorda però che quando usi questi metodi della classe lista in un main (o in qualunque altro metodo) devi effettuare gli appropriati casting:
Code:
Oggetto = ((Oggetto) lista.deleteTail() )