2011-05-09 29 views
6

El método toString() no se reemplaza en Set o su jerarquía, entonces, ¿cómo se imprimen los elementos?¿Cómo se implementa Set.toString()?

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(); 
    } 
} 
Output :----In Hashcode----first 
----In Hashcode----second 
----In Hashcode----third 
----In Hashcode----fourth 
----In Hashcode----fourth 
In Equals 
fourth=====equals======fourth 
----In Hashcode----fourth 
----In Hashcode----second 
----In Hashcode----third 
----In Hashcode----first 
elements in hashset[[email protected], [email protected] 
] 

También Al imprimir hashset el método se llama código hash para cada uno de los elementos? Qué significa el iterador llama a este método?

+1

, entonces es obvio que no ha comprobado toda la jerarquía. ver la clase AbstractCollection. – Manoj

+0

Acabo de ver el código (tipo de) y no hay pregunta. – Marcelo

+0

@Manoj: No; él está revisando la jerarquía incorrecta. 'Set' no hereda' AbstractCollection'. – SLaks

Respuesta

7

Las implementaciones Set heredan toString de AbstractCollection. Los elementos Set se muestran como una lista de cadenas separadas por comas.

+0

También cuando imprimo hashset, ¿se llama al método hashcode para cada uno de los elementos? ¿Significa que las llamadas al iterador este método ? – crackerplace

+0

'hashCode()' se llama en los métodos get y put de 'HashMap', que' HashSet' usa internamente (en realidad 'LinkedHashMap'). Consulta http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/util/HashMap.java si te interesa. –

+0

@ lee3lite OK .... – crackerplace

1

HashSet hace declaraciones de cuerdas separadas por comas como overrided por su superclase AbstractSet.

Sin sorpresas!

+0

Disculpa por la respuesta tardía. La pregunta fue respondida 2 minutos antes .. –