import java.util.*;
public class TestSet {
public static void main(String args[]) {
Set d = new HashSet();
//Name3 n1 = new Name3("n1");
//Name3 n2 = new Name3("n1");
//System.out.println(n1.equals(n2));
d.add(new Name3("n1"));
d.add(new Name3("n2"));
d.add(new Name3("n3"));
d.add(new Name3("n2"));//此对象无法加入,因为已经存在此对象
System.out.println(d);
}
}class Name3 {
String name;
public Name3(String name) {
this.name = name;
}
public boolean equals(Object obj) {
if(obj instanceof Name3) {
Name3 n = (Name3)obj;
if(name.equals(n.name)) {
return true;
}else return false;
}
return false;
} //必须重写hashCode
public int hashCode() {
// TODO Auto-generated method stub
return name.hashCode();
} public String toString() {
return name;
}
}
以上写法中只要name的值相同,相同对象就不能添加但我换成以下的写法,按我的理解两个new出来的对象,他们的hashCode应该是不一样的,所以我想他们应该可以都添加进去的,但结果相反,他们只添加进了一个import java.util.*;
public class TestSet {
public static void main(String args[]) {
Set d = new HashSet();
//Name3 n1 = new Name3("n1");
//Name3 n2 = new Name3("n1");
//System.out.println(n1.equals(n2));
d.add(new Name3("n1"));
d.add(new Name3(new String("n2")));
d.add(new Name3("n3"));
d.add(new Name3(new String("n2")));//此对象无法加入,因为已经存在此对象
System.out.println(d);
}
}class Name3 {
String name;
public Name3(String name) {
this.name = name;
}
public boolean equals(Object obj) {
if(obj instanceof Name3) {
Name3 n = (Name3)obj;
if(name.equals(n.name)) {
return true;
}else return false;
}
return false;
}
//必须重写hashCode
public int hashCode() {
// TODO Auto-generated method stub
return name.hashCode();
} public String toString() {
return name;
}
}
请大侠们帮忙解答一下
public class TestSet {
public static void main(String args[]) {
Set d = new HashSet();
//Name3 n1 = new Name3("n1");
//Name3 n2 = new Name3("n1");
//System.out.println(n1.equals(n2));
d.add(new Name3("n1"));
d.add(new Name3("n2"));
d.add(new Name3("n3"));
d.add(new Name3("n2"));//此对象无法加入,因为已经存在此对象
System.out.println(d);
}
}class Name3 {
String name;
public Name3(String name) {
this.name = name;
}
public boolean equals(Object obj) {
if(obj instanceof Name3) {
Name3 n = (Name3)obj;
if(name.equals(n.name)) {
return true;
}else return false;
}
return false;
} //必须重写hashCode
public int hashCode() {
// TODO Auto-generated method stub
return name.hashCode();
} public String toString() {
return name;
}
}
以上写法中只要name的值相同,相同对象就不能添加但我换成以下的写法,按我的理解两个new出来的对象,他们的hashCode应该是不一样的,所以我想他们应该可以都添加进去的,但结果相反,他们只添加进了一个import java.util.*;
public class TestSet {
public static void main(String args[]) {
Set d = new HashSet();
//Name3 n1 = new Name3("n1");
//Name3 n2 = new Name3("n1");
//System.out.println(n1.equals(n2));
d.add(new Name3("n1"));
d.add(new Name3(new String("n2")));
d.add(new Name3("n3"));
d.add(new Name3(new String("n2")));//此对象无法加入,因为已经存在此对象
System.out.println(d);
}
}class Name3 {
String name;
public Name3(String name) {
this.name = name;
}
public boolean equals(Object obj) {
if(obj instanceof Name3) {
Name3 n = (Name3)obj;
if(name.equals(n.name)) {
return true;
}else return false;
}
return false;
}
//必须重写hashCode
public int hashCode() {
// TODO Auto-generated method stub
return name.hashCode();
} public String toString() {
return name;
}
}
请大侠们帮忙解答一下
比如说字符串,是根据字符串的值来确定的,但是其他的object是依据值吗?我不是很确定。
以前我用这种方法的时候,往往是想把几个不是完全相同的对象,希望它们被Set当成是一个对象来看待,
于是重写hashCode方法。