Façon de vérifier si deux Collections contiennent les mêmes éléments, indépendamment de l'ordre?
Disons que j'ai deux différents hashsets comme indiqué ci-dessous comment puis-je vérifier que les deux Hashset contiennent les mêmes éléments et ces deux hashsets sont égaux, indépendamment de l'ordre des éléments dans la collection, veuillez en informer..!!
Set set1=new HashSet();
set.add(new Emp("Ram","Trainer",34000));
set.add(new Emp("LalRam","Trainer",34000));
et l'autre est ..
Set set2=new HashSet();
set.add(new Emp("LalRam","Trainer",34000));
set.add(new Emp("Ram","Trainer",34000));
L'employé pojo est ...
class Emp //implements Comparable
{
String name,job;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getJob() {
return job;
}
public void setJob(String job) {
this.job = job;
}
public int getSalary() {
return salary;
}
public void setSalary(int salary) {
this.salary = salary;
}
int salary;
public Emp(String n,String j,int sal)
{
name=n;
job=j;
salary=sal;
}
public void display()
{
System.out.println(name+"\t"+job+"\t"+salary);
}
public boolean equals(Object o)
{
Emp p=(Emp)o;
return this.name.equals(p.name)&&this.job.equals(p.job) &&this.salary==p.salary;
}
public int hashCode()
{
return name.hashCode()+job.hashCode()+salary;
}
/* public int compareTo(Object o)
{
Emp e=(Emp)o;
return this.name.compareTo(e.name);
//return this.job.compareTo(e.job);
// return this.salary-e.salary;
}*/
}
D'abord définir des "égaux". Est égale à la référence ou equuivalent? Dans ce dernier cas, equals et hashcode définir pour les Emp de classe?
En supposant que
Ce n'est pas différent de la comparaison de toutes les autres collections. Voir: stackoverflow.com/questions/50098/.... Bien que ce est .net, java mise en œuvre devrait être à peu près la même. Je recommande Daniel Jennings ou mbillings réponse que je suis sûr que la plus haute voté réponse viole les directives de Microsoft conditions d'utilisation.
Tout d'abord, est n'est pas utile de discuter de l'élément de commande dans un
Cette question est un doublon et la bonne réponse est ici: stackoverflow.com/questions/1565214/...
En supposant que
Emp
a bon remplacements pour equals()
et hashCode()
(ce qui n'est probablement, en raison de la présence dans une table de hachage), vous pouvez comparer les dénombrements sur les ensembles, et puis essayez d'ajouter tous les éléments d'un ensemble à l'autre. Si le add()
méthode retourne jamais true
, puis il y a une différence.Ce n'est pas différent de la comparaison de toutes les autres collections. Voir: stackoverflow.com/questions/50098/.... Bien que ce est .net, java mise en œuvre devrait être à peu près la même. Je recommande Daniel Jennings ou mbillings réponse que je suis sûr que la plus haute voté réponse viole les directives de Microsoft conditions d'utilisation.
Tout d'abord, est n'est pas utile de discuter de l'élément de commande dans un
Set
. Les jeux ont aucun ordre implicite. Deuxièmement, vous n'avez pas spécifié de ce que vous entendez par "égaux". Pour les collections, il pourrait être la "les deux collections contiennent le même ensemble de références à des éléments réels" ou "Tous les éléments de la collection de comparaison d'égalité (via equals()
) à leur élément correspondant dans la collection B". Vous semblez vouloir la dernière définition, qui est plus délicate à mettre en œuvre.Cette question est un doublon et la bonne réponse est ici: stackoverflow.com/questions/1565214/...
OriginalL'auteur user1582269 | 2012-08-09
Vous devez vous connecter pour publier un commentaire.
Exemple:
Ce n'est pas une bonne réponse, la réponse ci-dessous doit avoir obtenu la marque de graduation.
set1.equals(set2);
serait mieuxJe ne sais pas pourquoi il a fait l'objet de votes. Il est correct avec une explication.
OriginalL'auteur nyanshak
Citant AbstractSet.equals(Object) javadoc:
Il est donc suffisant de simplement appeler
set1.equals(set2)
. Il sera de retourtrue
si et seulement si l'ensemble contient les mêmes éléments (en supposant que vous avez correctement définiequals
ethashCode
sur les objets dans les décors).Cette réponse est la bonne, et beaucoup plus simple que l'on a accepté la réponse. +1.
OriginalL'auteur Petr Pudlák
Utiliser le dessous de l'expression.
OriginalL'auteur Aaron Kurtzhals
En supposant que vous avez défini equals et hashcode, voici un moyen. Pas très efficace pour les grandes membres de.
Mise à JOUR: je ne savais pas à propos containsAll, ce qui permet d'économiser beaucoup d'ennuis et ne fait que l'algorithme de
MJB pourriez vous s'il vous plaît mettre à jour le code complet pour faire understanging clair..!!
cool man merci beaucoup..!!
OriginalL'auteur MJB
Si vous souhaitez que les données de l'égalité puis mettre correctement en œuvre
equals()
ethashCode()
et puis vous pouvez utiliser Collection.containsAll(...). Bien sûr, vous devez vous assurer que vous appelez cela uniquement lorsque les deux collections ont le même nombre d'éléments sinon, vous pouvez simplement dire qu'ils ne sont pas égaux.Il est incroyable de voir comment beaucoup de choses que vous pouvez trouver dans l'API standard si vous savez où chercher. 🙂
OriginalL'auteur Aravind R. Yarram
Faire:
OriginalL'auteur Edmon
1 - Obtenir une collection(que l'on pourrait nommer "les différences") qui contient des éléments d'une collection et l'autre qui n'a pas -
Collection différences = CollectionUtils.soustraire(Collection1, Collection2);
2 - Vérifier que la taille == 0;
Si oui, - les deux collections ont les mêmes éléments;
si il y a quelques différences et puis vous devrez l'imprimer tous les articles que "les différences".
Ne sais pas si cela dépend des éléments de commande.
Je suis en comparant les collections de cette façon
OriginalL'auteur Vladislav Filin