黑马程序员技术交流社区
标题:
【关于集合】为什么用Map.Entry的getKey,得到的是hash值
[打印本页]
作者:
龚首道
时间:
2013-8-23 01:47
标题:
【关于集合】为什么用Map.Entry的getKey,得到的是hash值
本帖最后由 龚首道 于 2013-8-24 20:02 编辑
如题,我有以下所示代码,为什么我遍历后,Map.Entry的getKey返回的是hash值。为什么?
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public class HashMapDemo {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
HashMap<Student,String> hshmp = new HashMap<Student,String>();
hshmp.put(new Student("gong",22), "shanghai");
hshmp.put(new Student("haohao",23), "beijing");
Set<Map.Entry<Student,String>> me = hshmp.entrySet();
for(Iterator<Map.Entry<Student,String>> it = me.iterator();it.hasNext();)
{
Map.Entry<Student, String> mapentr = it.next();
Student stu = mapentr.getKey();
System.out.println("Stu:"+stu+",add:"+mapentr.getValue());
}
}
}
class Student implements Comparable<Student>
{
private String name;
private int age;
public Student(String n,int a)
{
this.name = n;
this.age = a;
}
public void setAge(int a)
{
this.age = a;
}
public int getAge()
{
return this.age;
}
public void setName(String n)
{
this.name = n;
}
public String getName()
{
return this.name;
}
@Override
public int compareTo(Student o) {
// TODO Auto-generated method stub
int num = new Integer(this.age).compareTo(new Integer(o.age));
if(num == 0)
return (this.name).compareTo(o.name);
return num;
}
@Override
public boolean equals(Object obj)
{
if(!(obj instanceof Student))
throw new ClassCastException("类型异常");
Student stu = (Student)obj;
return this.name.equals(stu.name) && this.age == stu.age;
}
public int hashCode()
{
return name.hashCode()+age*34;
}
}
复制代码
作者:
gulup
时间:
2013-8-23 02:18
哥们。。。你的Student类没有覆盖toString方法啊。。。直接输出了stu当然给你返回来Hash值啊。。。。
作者:
龚首道
时间:
2013-8-23 10:31
gulup 发表于 2013-8-23 02:18
哥们。。。你的Student类没有覆盖toString方法啊。。。直接输出了stu当然给你返回来Hash值啊。。。。 ...
原来如此。我再试试
作者:
ccyznhy
时间:
2013-8-23 10:38
本帖最后由 ccyznhy 于 2013-8-23 10:39 编辑
student没有覆盖toString()方法,常见问题啊啊啊
作者:
ccyznhy
时间:
2013-8-23 10:42
isFile()
测试此抽象路径名表示的文件是否是一个标准文件
isDirectory()
测试此抽象路径名表示的文件是否是一个目录
这2个方法就是File类中用来判断文件和文件夹也就是目录的方法
作者:
坚持远方
时间:
2013-8-23 10:58
因为你没有覆盖toString方法,而且你key中存储的是对象,所以获取到的就是哈希值
作者:
一个铃,一颗珠
时间:
2013-8-23 11:08
for(Iterator<Map.Entry<Student,String>> it = me.iterator();it.hasNext();)
{
Map.Entry<Student, String> mapentr = it.next();
Student stu = mapentr.getKey();
String name = stu.getName();
int age =stu.getAge();
System.out.println("StuName:"+name+",StuAage:"+age+",add:"+mapentr.getValue());
}
这种方式也可以得到你要的值
作者:
黄兴旺
时间:
2013-8-23 16:49
亲 如果问题已解决请把类别改为已解决,谢谢。
作者:
杨增坤
时间:
2013-8-23 19:51
如果问题解决了,请把问题的未解决更改为已解决
谢谢合作!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2