给HashSet
中添加.
import java.util.HashSet;
class Entrance{
public static void main(String[] args){
HashSet<String> hs=new HashSet<>();
boolean b1=hs.add("qwe");
boolean b2=hs.add("qwe");
System.out.println(b1);
System.out.println(b2);
}
}
在 java 中 String a=“sss”; String b=“wqr”;
因为String类中,默认为a,b 是同一个对象.
可以看到,第一个添加进去了,第二个没有.
import java.util.HashSet;
class Entrance{
public static void main(String[] args){
HashSet<String> hs=new HashSet<>();
boolean b1=hs.add(new String("qwe"));
boolean b2=hs.add(new String("qwe"));
System.out.println(b1);
System.out.println(b2);
}
}
在这里new了两个String的对象
可以看到,第一个添加进去了,第二个没有.
因为equals()方法String重写Object中的equals()方法,变为只判断值是否相等:
public boolean equals(Object obj) { // Object中的equals()方法 return (this == obj);
boolean b1=hs.add(new String(“qwe”));
boolean b2=hs.add(new String(“qwe”));
在这里,hs.add();
方法调用了String的equals方法,当添加的值相同时,则判断是相同对象.所以添加不进去.
import java.util.HashSet;
class Entrance{
public static void main(String[] args){
HashSet<Person> hs=new HashSet<>();
boolean b1=hs.add(new Person("qwe"));
boolean b2=hs.add(new Person("qwe"));
System.out.println(b1);
System.out.println(b2);
}
}
class Person{
String name;
Person(String name){
this.name=name;
}
}
这里可以看到,虽然添加的值相同,但添加进去了,哈希值不同所以认为是不同对象可以添加进去.因为HashSet中每个对象都会返回一个哈希值,哈希值不同,则为不同对象,哈希值相同,那么就会调用equals方法去逐个比较.不同则可以添加进去.提高了运行速率.