java collection d'éléments uniques
J'ai une Collection de coll de myObject. Je voudrais ajouter un élément au coll seulement si il n'y a aucun élément dans la collection.
J'ai surchargé la méthode equals de myObject. Il vérifie l'égalité de ses 20 attributs.
Toutefois, dans le cas de la collection, j'aimerais prendre le contrôle d'égalité (et donc de l'ajouter) basé sur un seul de ces attributs.
Peut-être que mon architecture est imparfait, et je ne devrais pas avoir deux définitions d'égal à égal, et devrait plutôt avoir 2 objets différents.
Cependant, est-il possible, sans trop de refactoring, pour réaliser ce que je veux partir d'ici ? C'est-à-dire, j'avais comme une sorte de Jeu de collection, où je pourrais me dire comment faire pour faire la comparaison vérifier. Ce serait semblable à la Collection.méthode sort (), où vous pouvez apporter le comparateur de vérifier pour la comparaison.
regardez SortedSet. peut-être que ce sera le travail pour vous
SortedSet pourrait fonctionner. Je serais très prudent, cependant, parce que votre comparaison ne serait pas compatible avec d'égal à égal et/ou complète.
OriginalL'auteur jbenz | 2013-04-15
Vous devez vous connecter pour publier un commentaire.
aller pour HashSet.Il permettra de stocker des valeurs uniques.Que de commentaires ici, vous devez remplacer le hashcode et equals méthodes pour fournir de l'unicité de chaque objet.Vous pouvez lire la relation entre ces deux méthodes ici.
Unique basé sur quoi ? C'est la question. Puis-je fournir un moyen de savoir si deux éléments sont uniques quand j'instancie le hashset ?
sens après la modification ?
N'aide pas à substituer hashCode. Vous avez également besoin d'égal à égal (OP ne veut pas l'utiliser)
maintenant, ok ?
OriginalL'auteur Android Killer
Vous êtes à la recherche d'un
Set
et l'une de ses implémentations.equals
.OriginalL'auteur
Vous ne pouvez pas utiliser les conteneurs existants pour renforcer l'unicité ici, parce qu'ils veulent utiliser
equals
.Si ce n'est qu'un attribut, vous pouvez utiliser une Carte, avec cet attribut comme une clé.
Qui permettra à une seule participation par la valeur de cet attribut.
equals
ethashCode
sont destinés à être utilisés avec des Collections. Vous devriez changer votre conception. Peut-être l'appeler vos propres est égale à (celui que vous avez maintenant) quelque chose d'autre. Peut-être ne pas mettre ces choses dans des collections directement, mais enveloppé dans un adaptateur de quelque sorte.Oui, vous le pouvez.
OriginalL'auteur Thilo
À l'aide d'un TreeSet(Comparateur, comparateur de), vous n'avez pas besoin de compter sur les " équivaut à/hashCode de mise en œuvre.
De même, si votre collection est une liste, vous pouvez trier à l'aide d'un comparateur de Collections.de tri(Liste de liste, Comparateur c);
OriginalL'auteur Legna