Java Set.toString()是如何实现的?

Java Set.toString()是如何实现的?,java,Java,toString()方法在Set或其层次结构中未被重写,因此如何打印元素 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");

toString()
方法在
Set
或其层次结构中未被重写,因此如何打印元素

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();
    }
}
输出:-在Hashcode中------第一个 ----在Hashcode中——第二个 ----在Hashcode中——第三个 ----在Hashcode中——第四个 ----在Hashcode中——第四个 平起平坐 第四=等于第四 ----在Hashcode中——第四个 ----在Hashcode中——第二个 ----在Hashcode中——第三个 ----在Hashcode中——第一 hashset中的元素[Hello@b4616a1a, Hello@c9 ]
另外,当我打印hashset时,会为每个元素调用hashcode方法?这是否意味着迭代器会调用此方法?

Set
是一个接口。
它不能覆盖方法


您使用的是
HashSet
类,该类继承了Set实现从中继承的toString。Set元素以逗号分隔的字符串列表的形式输出。

HashSet确实返回由其超类
抽象集覆盖的逗号分隔的字符串。


没有意外

很明显,您没有检查整个层次结构。看到类AbstractCollection。我只看到代码(有点),没有问题。@Manoj:没有;他查错了层次结构
Set
不会继承@SLaks的
AbstractCollection
,但HashSet会继承。
Set
没有任何实现。调用
HashSet.toString()
时执行的代码位于
AbstractCollection
中。您可以在
HashSet
的API文档中看到这一点,其中写道:“从类java.util.AbstractCollection继承的方法”当我打印HashSet时,hashcode方法也会为每个元素调用?这是否意味着迭代器会调用此方法?
hashcode()
HashMap
的get和put方法中调用,在内部使用的
HashSet
(实际上是
LinkedHashMap
)。看看你是否感兴趣。 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[Hello@b4616a1a, Hello@c9 ]