2016-11-25 1 views
0

Lorsque je lance le code ci-dessous, Collection.sort (l) lancera l'exception ci-dessous.Tri de la collection Java

Exception dans le thread "principal" java.lang.ClassCastException: learning.CollectionSort ne peut pas être jeté à java.lang.Comparable

public class CollectionSort { 
    public static void main (String[] args){ 
     List l = new ArrayList(); 
     CollectionSort obj1 = new CollectionSort(); 
     CollectionSort obj2 = new CollectionSort(); 
     l.add(obj1); 
     l.add(obj2); 
     Collections.sort(l); 
     for (int i = 0; i < l.size(); i++){ 
      System.out.println(l.get(i)); 
     } 
    } 
} 

En effet, nous devons mettre en œuvre comparable ou d'un comparateur pour trier des objets personnalisés. Normalement, nous aurons des propriétés dans un objet qui sont utilisées pour le tri.

Mais dans le code ci-dessus, nous n'avons pas de propriétés dans cette classe. Donc, est-il possible de trier la liste ci-dessus? S'il vous plaît partagez vos pensées.

+0

Eh bien, si vous voulez trier, vous devez implémenter 'Comparable'. – Mritunjay

+0

Ummm, non. La liste contient deux objets 'CollectionSort'. Pour le trier, la méthode de tri doit indiquer quel objet est "inférieur" à l'autre. Comment peut-il faire cela, si vous ne lui avez pas fourni un moyen de le savoir? Que pensiez-vous que le genre allait faire avec ces objets? – ajb

Répondre

0

Mais dans le code ci-dessus, nous n'avons aucune propriété dans cette classe. Donc, est-il possible de trier la liste ci-dessus?

Oui, vous pouvez écrire un Comparator que les commandes basé sur le code de hachage (hashCode()) ou valeur de chaîne (toString()), et l'utiliser pour trier la liste ...

Collections.sort(l, new MyComparator()). 

Mais on ne sait pas serait gagné par cela, car les ordres qui en résultent n'ont pas de signification particulière. En effet, si vous êtes libre de choisir la base que vous souhaitez trier, alors pourquoi ne pas trier les éléments de la liste par leur index dans la liste? Ensuite, votre liste est toujours trivialement triée sans invoquer aucune méthode.

+0

Merci pour la réponse. Je suis conscient que cela n'a aucun sens pour le tri. Juste pour savoir comment ça marche, j'ai essayé ça. Et quand devrait être utiliser comparateur et comparable dans les applications. – Vijay

0

Mettre en oeuvre Comparable Interface sur CollectionSort classe ou

Créer Comparator classe d'implémentation pour passer comme paramètre à Collections.sort(collection,comparatorReference);

Collections documentation de la classe.