java中HashMap的使用,我之前有定义一个Person类,只是定义了两个属性而已,没有问题的。

importjava.util.HashMap;importjava.util.Map;publicclassMap_Use{publicstaticvoidmain(S... import java.util.HashMap;import java.util.Map;
public class Map_Use {
public static void main(String[] args) {
Map<String,Person> map=new HashMap<String,Person>();
Person p=new Person();
p.setName("hgy");
p.setId("20123456");
map.put("001", p);
System.out.println(map.entrySet());
}
}

这个输出,让我有点难理解,以下是输出。
[001=Person@8813f2]

求各位朋友说下我的问题,如果需要详细的Person类代码,可以回答中告诉我。谢谢
展开
 我来答
泷绮云3f
2012-11-20 · 超过13用户采纳过TA的回答
知道答主
回答量:31
采纳率:0%
帮助的人:29.1万
展开全部
entrySet方法返回的是一个映射关系的 set 视图,[001=Person@8813f2] key001映射Person对象后面的类似于hashcode之类的,你这里想输出的是什么 ,如果你只是想输出Person对象的话用

System.out.println(map.get("001"));这样就行了,如果你已经在Person里面重写了toString方法的话结果应该就是你重写的输出方式了,如果没有话 System.out.println(map.get("001").get方法);这样可以得到上在面的name \id属性
追问
嗯,明白你的意思了。
是我之前不是很懂那个entrySet()方法的用法导致。谢谢
百度网友ce7f3ccb4
2012-11-20 · TA获得超过1950个赞
知道大有可为答主
回答量:2299
采纳率:0%
帮助的人:1880万
展开全部
呵呵,你的代码输出这种结果就对了,本来就应该输出这个,p是一个对象啊,
System.out.println(map.entrySet());输出的是键值对,你的键是001,值是P对象
如果你真的想输出你想要的东东,只有这样了
-----------------------------------------------------------
//在person类中写个方法嘛
public String ToString()
{
return "="+this.getName()+" "+this.getId();
}
//------------------------------------------------------

Map<String,Person> map=new HashMap<String,Person>();
Person p=new Person();
p.setName("hgy");
p.setId("20123456");
map.put("001", p);
for (String str : map.keySet()) {
System.out.println(str+map.get(str).ToString());
}

不知道你要输出这个干什么
追问
我是新手,刚开始不知道entrySet()方法的用处哦。
谢谢你的热心回答。
追答
哦,没什么用的,我没用到过
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yuxiubin2365
2012-11-20 · 超过19用户采纳过TA的回答
知道答主
回答量:65
采纳率:0%
帮助的人:45万
展开全部
在Person 类中 重写toString()方法就OK了

具体在eclipse 编辑框中单击右键 应该有个OverridetoString() 选择你需要打印的属性
追问
还没有接触的那么深~~(*^__^*) 嘻嘻
不过谢谢你的热心回答。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
idealwangqing
2012-11-20
知道答主
回答量:12
采纳率:0%
帮助的人:11.8万
展开全部
首先要知道,System.out.prinltn(map.entrySet()); 是调用了 map.entrySet()方法返回的对象的toString()方法。这样的话,看 HashMap 源码:
public Set<Map.Entry<K,V>> entrySet() {
return entrySet0();
}

private Set<Map.Entry<K,V>> entrySet0() {
Set<Map.Entry<K,V>> es = entrySet;
return es != null ? es : (entrySet = new EntrySet());
}
返回的是 entrySet 成员变量,再看 entrySet:
// Views
private transient Set<Map.Entry<K,V>> entrySet = null;

private final class EntrySet extends AbstractSet<Map.Entry<K,V>> {}

所以我们看 AbstractSet,找 toString() 没有,
public abstract class AbstractSet<E> extends AbstractCollection<E> implements Set<E> {}

再看其父类AbstractCollection, 找 toString(),代码如下:
public String toString() {
Iterator<E> i = iterator();
if (! i.hasNext())
return "[]";

StringBuilder sb = new StringBuilder();
sb.append('[');
for (;;) {
E e = i.next();
sb.append(e == this ? "(this Collection)" : e);
if (! i.hasNext())
return sb.append(']').toString();
sb.append(", ");
}
}

在这里,我们可以看你输出的结果[001=Person@8813f2]中 这个[ ]了。接着看:

因为 E 是 Map.Entry,在sb.append(e == this ? "(this Collection)" : e);,又调用 了 Map.Entry 的 toString()。去 HashMap中看 Entry 的 toString():
static class Entry<K,V> implements Map.Entry<K,V> {
public final String toString() {
return getKey() + "=" + getValue();
}
}

它是 key=value的形式。你的结果[001=Person@8813f2],key就是001,value是Person对象。
我们再看 person为什么会输出 Person@8813f2格式。Person的父类是 Object,我们看Object的 toString():
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
toString()返回一个字符串,前面是类的类名,即Person的类名是Person,再加上一个@。
Integer.toHexString(int)将一个数字转换成一个十六进制的数,就是你看到的8813f2。

以上就是你为什么看到的输出结果是[001=Person@8813f2]的原因,打完收工。

java学习群:149534040
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
矢风快乐
2012-11-20 · TA获得超过991个赞
知道小有建树答主
回答量:632
采纳率:100%
帮助的人:320万
展开全部
这个很底层的,这个东东是这个对象的toString方法形成的。这个方法是sun给我们定义好的。这个你没有必要看明白的。map的价值在于利用key方便快速的获取其后的value的内容。所以,你不应该在这个输出上费脑筋。
更多追问追答
追问
但是,我想让它输出的是 [001=hgy 10123456]
有没有办法,让它输出我想要的呢?
追答
10123456是什么呢?
System.out.println(map.entrySet());
System.out.println(map.entrySet().toString());
你看这2个输出是不是一样的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式