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
]