地图 - 不断得到散列码,而不是访问值
我创建了一个地图如下:地图 - 不断得到散列码,而不是访问值
private Map<String, List<Client>> clientCatalogue;
this.clientCatalogue = new TreeMap<String, List<Client>>();
的关键是客户的名字,和值的客户的详细信息列表。
我使用keySet()遍历它。我想每次访问与键关联的每个值列表,然后在转到下一个值列表之前对其进行进一步处理。我已经将这些值复制到List类型变量(clientDetails)中,并认为我会将它们打印出来以检查它们。但是我一直在收回hashcode。为什么会这样,我能做些什么来解压缩这些哈希码并访问我想要的值?任何建议感激。
List<Client> clientDetails;
clientDetails = new ArrayList<Client>();
for (String eachClient : this.clientCatalogue.keySet())
{
clientDetails = clientCatalogue.get(eachClient);
System.out.println("Details of client are: " + clientDetails);
}
试试这个:
for (String eachClient : this.clientCatalogue.keySet())
{
List<Client> clientDetails; = clientCatalogue.get(eachClient);
for(Client cl : clientDetails)
{
System.out.println("Details of client are: " + cl.toString());
}
}
的问题是,您使用的打印清单作为一个整体,而不是在列表中的个人客户。
顺便说一句,您需要在Client
类中的toString()
方法正确实施。
此外,您不需要为List<Clients> clientDetails
创建新实例。
另外,如果你不想重复上的按键,但是,值直接做到这一点:
for (List<Client> clientDetails : this.clientCatalogue.values())
{
for(Client cl : clientDetails)
{
System.out.println("Details of client are: " + cl.toString());
}
}
嘿,非常感谢你,你真的帮助我了解我错在哪里。我开始绝望地想要与之交手。祝你有美好的一天。 – Ellie 2011-04-07 19:45:59
,你应该重写的toString()方法在客户类。当你试图通过sysout打印任何对象时,它的toString方法将被调用,在你的情况下它被调用了对象的类。因此,将其重写为您希望sysout为您打印它。
感谢您的帮助,非常感谢 – Ellie 2011-04-07 19:49:13
您需要在Client
类中实施toString()
才能返回想要打印的详细信息。
非常感谢 – Ellie 2011-04-07 19:49:32
@Ellie欢迎您!请不要忘记接受你最好回答你的问题的答案。此外,当你达到15的声望时,你可以开始upvoting所有你认为有用的答案,除了接受一个。它比“谢谢你”的评论还要快! – 2011-04-07 19:52:56
TreeMap从AbstractMap继承它的toString方法,它看起来会尝试输出一个漂亮的地图表示,但是如果你没有给出clientDetails的toString实现,你不会得到任何漂亮的东西。尽管如此,你的字符串输出的样本仍然有助于确定。
非常感谢您的帮助 – Ellie 2011-04-07 19:46:32
你知道你不需要申报,并在单独的行初始化变量,对不对? – 2011-04-07 19:10:02
如果你只是使用键来查找值,你可以迭代'values()'。如果你同时需要,迭代'entrySet()'。 – unholysampler 2011-04-07 19:15:55
感谢您的帮助 – Ellie 2011-04-07 19:48:09