import java.util.*; public class HashSetTest { public static void main(String[] args) { HashSet hss

我是想看看hashset,因为用String两个相同的String只会存贮一个,但是自己声明的student,虽然得到的hashcode相同,而且eqaul返回的也是tr... 我是想看看hashset,因为用String两个相同的String只会存贮一个,但是自己声明的student,虽然得到的hashcode相同,而且eqaul返回的也是true,但是还是会将两个student放入到hashcode中,实在不知道为什么,求高人指教
import java.util.*;
public class HashSetTest {
public static void main(String[] args)
{
HashSet hss = new HashSet();
hss.add("one");
hss.add("one");
System.out.println(hss.size());
HashSet hs = new HashSet();
hs.add(new Student(1,"one"));
hs.add(new Student(1,"one"));
hs.add(new Student(3,"one"));
hs.add(new Student(4,"four"));
System.out.println(new Student(1,"one").HashCode());
System.out.println(new Student(1,"one").HashCode());
Iterator it = hs.iterator();
while(it.hasNext())
{
System.out.println(it.next());
}
System.out.println(hs.size());
}
}
class Student
{
int num;
String name;
Student(int num, String name)
{
this.num = num;
this.name = name;
}
public int HashCode()
{
return num * name.hashCode();
}
public boolean equals(Object o)
{
Student o1 = (Student) o;
return num == o1.num && name == o1.name;
}
public String toString()
{
return "name:=" + name;
}
}
展开
 我来答
haoshaochi
2013-01-28 · 超过21用户采纳过TA的回答
知道答主
回答量:66
采纳率:0%
帮助的人:51.4万
展开全部
两个“one”字符串都存在常量池中,字符串相等,地址相同,所以只存一个。Student存两个是因为
hashCode方法第一个字母h是小写的,你写的 HashCode()第一个字母是大写,也就是没有覆盖继承来的hashCode() 方法,所以你判断哈希码的依据是错误的,你写的方法返回值相同,但实际的哈希码(根据地址计算)不同。
楚立诚B
2013-01-28 · TA获得超过1.2万个赞
知道小有建树答主
回答量:461
采纳率:0%
帮助的人:135万
展开全部
你的方法名为HashCode()方法,不是重写父类的hashCode()方法该为下面的就可以了
//要重写父类的 hashCode()方法
public int hashCode() {
return num* name.hashCode() ;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lyhfylc
2013-01-28 · 超过15用户采纳过TA的回答
知道答主
回答量:92
采纳率:0%
帮助的人:36.7万
展开全部
new过后他们的内存地址不一样,hashcode是根据内存地址返回哈希吗的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式