Pages: [1]   Go Down
Print
Author Topic: Ordinare oggetti di tipo Object  (Read 990 times)
0 Members e 1 Utente non registrato stanno visualizzando questa discussione.
thomas89
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 341



« 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   ..

spero di avervi spiegato il mio problema nel miglior modo possibile   testate
Logged

Solo due cose sono infinite: l'universo e la stupidità umana, ma riguardo l'universo ho ancora dei dubbi.
thomas89
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 341



« Reply #1 on: 15-04-2009, 19:55:18 »

*
Logged

Solo due cose sono infinite: l'universo e la stupidità umana, ma riguardo l'universo ho ancora dei dubbi.
Aigor
Forumista Esperto
****
Offline Offline

Gender: Male
Posts: 1.184


"Il destino non è una catena, ma un volo."[A.B.]


« Reply #2 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.
Logged

"Era d'altronde uno di quegli uomini che amano assistere alla propria vita, ritenendo impropria qualsiasi ambizione a viverla.
Si sarà notato che essi osservano il loro destino nel modo in cui, i più, sono soliti osservare una giornata di pioggia." - Seta,Baricco
thomas89
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 341



« Reply #3 on: 15-04-2009, 21:44:57 »

qlkn mi potrebbe far vedere un esempio, un pezzo di codice.. qlks cosa  pray
Logged

Solo due cose sono infinite: l'universo e la stupidità umana, ma riguardo l'universo ho ancora dei dubbi.
Eleirgab
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 344


Apprezzatemi ora. Eviterete la fila


WWW
« Reply #4 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() )
Logged

Collettivo SDAI

-----BEGIN GEEK CODE BLOCK-----
Version: 3.1
GIT d-- s+:+ a-- C++ UL++ P L+++ E- W+++>$ N? o? K- w-- O? M V? PS++ PE- Y+ PGP- t 5? X+ R>+ tv-- b++ DI+++ D- G e h! r y+
------END GEEK CODE BLOCK-----
Pages: [1]   Go Up
Print
Jump to: