Comment remplacer compareTo (Java)
Je suis un débutant en programmation et j'ai deux classes. La première classe est:
public class User implements Comparable<User>
avec le champ int age
, le constructeur et le surdéfini méthode de l'interface Comparable:
@Override
public int compareTo(User user) {
return user.age >= age ? -1 : 0;
}
Deuxième classe est
public class SortUser
avec une méthode pour faire un Jeu de collection à partir d'une Liste:
public Set<User> sort(List<User> list) {
Set<User> result = new TreeSet<>();
for (User user : list) {
result.add(user);
}
return result;
}
Il me semble que tous les User
objets dans un Ensemble qui doit être triée, mais quand j'ai fait une Liste avec les 3 User
objets...
User a = new User(1);
User b = new User(2);
User c = new User(3);
List<User> list = new ArrayList<>();
list.add(c);
list.add(a);
list.add(b);
(Aujourd'hui la liste de l'ordre est le suivant: 312
)
...et créé un Set
(TreeSet
) à partir de cette liste:
SortUser sortUser = new SortUser();
Set<User> set = sortUser.sort(list);
À la fin j'ai un set
avec cet ordre: 13
, cela signifie que seules les deux objets sont dans le set
. Ce qui ne va pas?
Je n'aurais pas à les trier en l'ajoutant à un ensemble. Appelez simplement
Vous ne pouvez pas avoir un Ensemble trié. Les ensembles sont des collections non triées. Une méthode sort() besoins de trier une Liste (ou d'une autre collection ordonnée) en place, ou de revenir une Liste.
Eh bien, techniquement, vous ont un ensemble ordonné. Vous avez juste à vous assurer que la mise en œuvre spécifique prend en charge. Son tout à fait possible d'écrire un ensemble ordonné de mise en œuvre.
compareTo doit retourner -1, 0 +1 . la bonne pratique consiste à repenser hashCode() et equals()
est correcte. Envisager le standard de java.util.TreeSet - docs.oracle.com/javase/7/docs/api/java/util/TreeSet.html C'est littéralement un ensemble ordonné de mise en œuvre.
sort
sur la liste.Vous ne pouvez pas avoir un Ensemble trié. Les ensembles sont des collections non triées. Une méthode sort() besoins de trier une Liste (ou d'une autre collection ordonnée) en place, ou de revenir une Liste.
Eh bien, techniquement, vous ont un ensemble ordonné. Vous avez juste à vous assurer que la mise en œuvre spécifique prend en charge. Son tout à fait possible d'écrire un ensemble ordonné de mise en œuvre.
compareTo doit retourner -1, 0 +1 . la bonne pratique consiste à repenser hashCode() et equals()
est correcte. Envisager le standard de java.util.TreeSet - docs.oracle.com/javase/7/docs/api/java/util/TreeSet.html C'est littéralement un ensemble ordonné de mise en œuvre.
OriginalL'auteur aLittleMind | 2017-03-17
Vous devez vous connecter pour publier un commentaire.
Je vois que vous avez tort de mise en œuvre de la méthode de comparaison. Pourriez-vous le mettre à jour?
OriginalL'auteur Roma Khomyshyn
Ce que vous faites avec le
TreeSet
est inutile. Je ne suis pas sûr qu'ils sont la garantie d'avoir certains de commande lors de l'itération.Il suffit de remplacer votre méthode de tri avec
Collections.sort(list)
Et ma deviner pourquoi un élément supprimé est votre
compareTo
méthode ne retourne jamais un1
en tout cas, si les éléments sont toujours considérée comme un être inférieur ou égal à d'autres éléments, ce qui est probablement le vissage avec leTreeSet
.OriginalL'auteur Carcigenicate
Veuillez suivre ci-dessous la méthodologie
En cas de chaîne de caractères.
Dans le cas de valeurs entières
OriginalL'auteur Lova Chittumuri
De l'utilisateur de la classe
préparer une liste
pour le tri
OriginalL'auteur rathna