Comment est Définie.toString() mise en œuvre?
La toString()
méthode n'est pas remplacée dans les Set
ou de sa hiérarchie, alors, comment sont les éléments imprimés?
import java.lang.Math;
import java.util.HashSet;
class Hello{
public String name= "";
Hello(String name){
this.name = name;
}
public static void main(String args[]){
Hello h1 = new Hello("first");
Hello h2 = new Hello("second");
Hello h3 = new Hello("third");
Hello h4 = new Hello("fourth");
Hello h5 = new Hello("fourth");
HashSet hs = new HashSet();
hs.add(h1);
hs.add(h2);
hs.add(h3);
hs.add(h4);
hs.add(h5);
//hs.add(h5);
//hs.add(null);
System.out.println("elements in hashset"+hs);
//System.out.println("elements in hashset"+hs.contains());
//System.out.println("elements in hashset"+hs.contains(new Hello("who")));
}
public boolean equals(Object obj){
System.out.println("In Equals");
System.out.println(name+"=====equals======"+((Hello)obj).name);
if(name.equals(((Hello)obj).name))
return true;
else
return false;
}
public int hashCode(){
System.out.println("----In Hashcode----"+name);
return name.hashCode();
}
}
De sortie :----Dans Hashcode----première ----Dans Hashcode----deuxième ----Dans Hashcode----troisième ----Dans Hashcode----quatrième ----Dans Hashcode----quatrième Dans Est Égal À quatrième=====égal à======quatrième ----Dans Hashcode----quatrième ----Dans Hashcode----deuxième ----Dans Hashcode----troisième ----Dans Hashcode----première éléments hashset[Bonjour@b4616a1a, Bonjour@c9 ]
Aussi, Quand j'ai l'impression hashset le hashcode méthode est appelée pour chaque élément ?Signifie-t-il l'itérateur appelle cette méthode ?
- ensuite, il est évident que vous n'avez pas coché l'ensemble de la hiérarchie. voir la classe AbstractCollection.
- Je viens de voir le code (un peu) et pas de question.
- Non; il est la vérification de la hiérarchie incorrect.
Set
n'héritent pasAbstractCollection
. - mais HashSet n'.
- Exactement. Il est de la vérification de la hiérarchie incorrecte.
- Yaaah .. eu .. Thnx ...
Set
n'a pas de mise en œuvre. Le code exécuté lorsqueHashSet.toString()
est appelé est dansAbstractCollection
. Vous pouvez voir cela dans les docs de l'API deHashSet
où il est dit: "les Méthodes héritées de la classe java.util.AbstractCollection"
Vous devez vous connecter pour publier un commentaire.
Set
est une interface.Il ne peut pas remplacer les méthodes.
Vous êtes à l'aide de la
HashSet
classe, qui hériteAbstractCollection.toString()
L'Ensemble des implémentations hériter toString de AbstractCollection. L'Ensemble des éléments sont de sortie comme une liste de chaînes séparées par des virgules.
hashCode()
est appelé dans le get et put méthodes deHashMap
, quiHashSet
utilise en interne (en faitLinkedHashMap
). Voir grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/... si vous êtes intéressé.HashSet ne renvoie séparées par des virgules, les chaînes de caractères comme surdéfini par sa super-classe
AbstractSet.
Pas de surprises!