|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Sep 2007
Messaggi: 59
|
[JAVA] Comparable ed interi
Salve a tutti ho un piccolo problemino, per utilità mi son creato una classe
Codice:
public class ListaOrdinata<Chiave, Valore> Ecco i metodi che uso per l'insert "ordinato" Codice:
public boolean minore(Nodo<K,V> nodo) {
return minore(nodo.chiave, chiave);
}
public boolean minore(K k1, K k2) {
if (k1 == null) return false;
if (k2 == null) return true;
return (k1.toString().compareTo(k2.toString()) < 0 );
}
Codice:
public void insert(Chiave k, Valore v) {
testa = insert(k, v, testa);
}
private Nodo<Chiave,Valore> insert(Chiave k, Valore el, Nodo<Chiave,Valore> testa) {
// caso 1: la lista e' vuota
if (testa == null)
return new Nodo<Chiave,Valore>(k,el);
// caso 2: la chiave e' maggiore del primo elemento e un nuovo nodo va inserito prima
if (testa.minore(k,testa.chiave)) {
Nodo<Chiave,Valore> nuovo = new Nodo<Chiave,Valore>(k,el);
nuovo.prox = testa;
return nuovo;
}
// caso 3: l'elemento va inserito nel resto della lista
testa.prox = insert(k, el, testa.prox);
return testa;
}
Come posso risolvere ? Vi ringrazio |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
Il problema è che il PC non è abbastanza intelligente per capire da solo che se una stringa contiene un numero allora potresti volerlo ordinare per la quantità che esprime anziché per la sequenza di caratteri da cui è composto.
Detto altrimenti, "10" > "9.5" ? no perché il carattere "1" vale meno del carattere "9" 10 > 9.5? sì perché 10 è maggiore di 9.5 Posto che si tratta di un problema già risolto nelle librerie standard, l'intoppo si aggirerebbe "parametrizzando" il confronto che fai nel metodo "minore", vale a dire considerando che tipi di dato diversi possono richiedere funzioni d'ordine diverse. Dovresti cioè dire: se k1 e k2 esprimono dei numeri allora non uso un ordinamento lessicografico ma userò un ordinamento numerico, considerandoli come numeri (cioè li converti a Long o Double secondo i casi). Da lì ti accorgerai che ci sono casi che richiedono un tanto di arbitrarietà: ad esempio una stringa e un numero o un JPanel e un Point. Come li ordini? Be', come preferisci.
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me! |
|
|
|
|
|
#3 | |
|
Member
Iscritto dal: Sep 2007
Messaggi: 59
|
Quote:
|
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: May 2001
Messaggi: 12919
|
Non basterebbe evitare di usare il toString() in minore?
compareTo dovrebbe già includere queste cose, altrimenti a che servono le interfacce? |
|
|
|
|
|
#5 |
|
Member
Iscritto dal: Sep 2007
Messaggi: 59
|
|
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Jul 2006
Città: Bergamo
Messaggi: 401
|
Puoi dichiarare la tua chiave come Comparable, o come K extends Comparable, così sei certo che la tua chiave implementi il metodo compareTo
__________________
iMac 27" 5K |
|
|
|
|
|
#7 | |
|
Member
Iscritto dal: Sep 2007
Messaggi: 59
|
Quote:
Quindi dovrei fare una cosa del genere ? Codice:
public class ListaOrdinata<Chiave extends Comparable, Valore> |
|
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
Puoi usare TreeMap, che è già incluso nelle librerie standard e funziona allo stesso modo.
Opzione che probabilmente risulterà allettante se consideri che la forma suggerita sarebbe precisamente: Codice:
public class SortedList<K extends Comparable<? super K>, V> {
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me! |
|
|
|
|
|
#9 | |
|
Member
Iscritto dal: Sep 2007
Messaggi: 59
|
Quote:
|
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 01:04.




















