0
votes

Comment rechercher des valeurs en double dans Java Hashset si elles sont à l'intérieur de l'objet de la classe définie par l'utilisateur?

code xxx xxx

méthode principale xxx

Son imprimer les mêmes valeurs des deux premières sociétés. xxx

où il devrait imprimer techniquement des valeurs uniques uniquement, Que faut-il faire pour l'empêcher d'imprimer des valeurs communes ??


1 commentaires

Un jeu hash dépend du code hash de un objet. Tous vos objets ont différents hashcodes.


5 Réponses :


3
votes

Un ensemble par définition ne peut pas contenir deux objets avec des valeurs «égales».

Votre problème est que votre classe de société n'a aucun concept particulier de deux objets de société égaux.

société doit définir des méthodes égales () et HashCode ().


0 commentaires

0
votes

Lorsque vous mettez un objet dans un hashset, il utilise la valeur HashCode de l'objet pour déterminer où placer l'objet dans l'ensemble. Mais il compare également le hashcode de l'objet au hashcode de tous les autres objets de l'ensemble de hachages, et s'il n'y a pas de hashcode correspondant, le hashset suppose que ce nouvel objet n'est pas un duplicata. Hashset trouve un hashcode correspondant pour deux objets. L'un que vous insérez et un déjà dans le jeu-the Hashset appellera ensuite l'un des méthodes égales de l'objet () pour voir si ces objets assortis de hashcode sont vraiment égaux. Et s'ils sont égaux, le hashset sait que l'objet que vous essayez d'ajouter est un duplicata de quelque chose dans l'ensemble, de sorte que l'ajout ne se produise pas.

remplacer cette méthode est égale à vérifier l'égalité de l'objet avec le hashcode. Boolean public égaux (objet O)


0 commentaires

0
votes

Vous devrez remplacer les équivalions et la méthode HASCODE.

@Override
public boolean equals(Object other) {
if(!other instanceof Society) 
    return false;

 Society o = (Society)other;

 return o.address.equals(address) && o.name.equals(name) && o.noOfFlats.equals(noOfFlats)
}

@Override
public int hashCode() 
{  
    // your hascode implementation. 
} 


1 commentaires

Merci pour l'aide.



0
votes

Ajouter les méthodes ci-dessous 2 à votre classe de la société. Vous devez d'abord utiliser les méthodes d'équivalence () et HashCode () pour vérifier que l'élément est unique.

    @Override
    public boolean equals(Object obj) {
            Society otherObj = (Society) obj;
            return this.name.equals(otherObj .name) &&
                     this.noOfFlats.equals(otherObj .noOfFlats) &&
                     this.address.equals(otherObj .address) &&
                    this.hashCode() == otherObj .hashCode();
    }

    @Override
        public int hashCode() {
            return (43 + 777);
    }


0 commentaires

0
votes

Je crois que la racine de votre problème n'est pas technique, mais conceptuelle.

Votre situation tourne autour de l'idée des ensembles rejetant des doublons et il est vrai, définit des travaux de travail exlusivement avec des valeurs uniques. Mais la chose est que cela ne s'applique qu'aux littéraux, qui sont des valeurs simples définies individuellement par l'utilisateur (des choses comme "Pune", "Kamalapark" et 15, lorsqu'ils sont ajoutés à un ensemble individuellement, en tant qu'éléments indépendants).

Cependant, lorsque, comme dans votre code, un ensemble est composé d'objets, pas de littéraux, puis de le rendre conforme à l'unicité, vous devez utiliser des méthodes hachage et égales. Dans ce fil, nous avons déjà réponses et Commentaires couvrant cette chose.

J'espère que mon explication rend votre situation plus claire.


0 commentaires