Comparaison des éléments dans une liste générique

J'ai écrit une liste liée de mise en œuvre de ma classe java plus tôt cette année. C'est une classe générique appelé LList. Nous avons maintenant pour écrire la fusion algorithme de tri pour un laboratoire. Au lieu de créer une nouvelle Liste de mise en œuvre qui prend Ints, j'ai décidé de réutiliser le générique de la liste que j'avais créé avant.

Le problème est de savoir comment dois-je comparer deux des objets génériques?
java ne me laissera pas faire quelque chose comme

if(first.headNode.data > second.headNode.data)

Donc, ma question est, est-ce pour mettre en œuvre une sorte de fonction de comparaison qui fonctionne sur n'importe quel type de données? J'ai essayé le suivant:

        String one, two;
        one = first.headNode.data.toString();
        two = second.headNode.data.toString();
        if(first.headNode.data.compareTo(second.headNode.data) < 0) {
            result.add(first.headNode.data);
            //remove head node. remove() takes care of list size.
            first.remove(1);
        } else {
            //If compareTo returns 0 or higher, second.headNode is lower or
            //equal to first.headNode. So it's safe to update the result
            //list
            result.add(second.headNode.data);
            second.remove(1);
        }

Qui wont même fonctionner correctement. J'ai testé avec les chiffres 6 et 12, ci-dessus ajoute 12 à la liste des résultats.

Pertinentes trucs:

 private LList<T> mergeSort(LList<T> list) {
LList<T> first = new LList();
LList<T> second = new LList();
if (list.length() == 1) {
return list;
}
int middle = list.length() / 2;
second.headNode = list.getNodeAt(middle + 1);
second.length = list.length() - (middle);
//Set first half to full list, then remove the "second" half.
first.headNode = list.headNode;
first.length = middle;
first.getNodeAt(middle).next = null;
//Get the splitted halves.
first = mergeSort(first);
second = mergeSort(second);
return merge(first, second);
}
private LList<T> merge(LList<T> first, LList<T> second) {
LList<T> result = new LList();
while((first.length > 0) && (second.length > 0)) {
//Ok, lets force toString to compare stuff since generics are a pain.
String one, two;
one = first.headNode.data.toString();
two = second.headNode.data.toString();
if(one.compareTo(two)) < 0) {
result.add(first.headNode.data);
//remove head node. remove() takes care of list size.
first.remove(1);
} else {
//If compareTo returns 0 or higher, second.headNode is lower or
//equal to first.headNode. So it's safe to update the result
//list
result.add(second.headNode.data);
second.remove(1);
}
}
return result;
}

REMARQUE: toute LList classe peut être trouvé [ici](http://rapidshare.com/files/219112739/LList.java.html
MD5: BDA8217D0756CC171032FDBDE1539478)

  • Si vous voulez "tricher", regardez le source java pour quelque chose comme des Collections.sort(). Lorsque vous installez le JDK, il devrait y avoir une option pour installer la source. Puis il y aura une src.jar fichier dans votre répertoire d'installation. Un .fichier jar peut être renommé .zip et ouvert dans WinZip.
InformationsquelleAutor Matt R | 2009-04-09