地图 - 不断获取哈希码而不是访问值

时间:2011-04-07 19:07:49

标签: java

我创建了一个Map,如下所示:

private Map<String, List<Client>> clientCatalogue;
this.clientCatalogue = new TreeMap<String, List<Client>>();

密钥是客户端名称,值是客户端详细信息的列表。

我正在使用keySet()迭代它。我想一次访问一个与键相关联的每个值列表,然后在继续处理下一个值列表之前对每个值进行进一步处理。我已将值复制到List类型变量(clientDetails)中,并认为我将它们打印出来以检查它们。但我一直在回收哈希码。为什么这样,我该怎么做才能解压缩这些哈希码并访问我想要的值?任何建议表示赞赏。

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);
}

4 个答案:

答案 0 :(得分:2)

试试这个:

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());
    }
}

问题在于您是打印整个列表而不是列表中的各个客户端。

顺便说一句,您需要在toString()课程中正确实施Client方法。

此外,您无需为List<Clients> clientDetails创建新实例。

另外,如果您不想迭代键,而是直接在值上执行此操作:

for (List<Client> clientDetails : this.clientCatalogue.values())
{
    for(Client cl : clientDetails)
    {    
         System.out.println("Details of client are: " + cl.toString());
    }
}

答案 1 :(得分:0)

您应该在客户端类中覆盖 toString()方法。当您尝试通过sysout打印任何对象时,将调用其toString方法,在您的情况下,它将调用Object的类。因此,请将其覆盖为您希望sysout为您打印的方式。

答案 2 :(得分:0)

您需要在toString()课程中实施Client,以便返回您要查看的详细信息。

答案 3 :(得分:0)

TreeMap从AbstractMap继承了它的toString方法,看起来它会尝试输出一个漂亮的地图表示,但如果你没有给出clientDetails的toString实现,你就不会得到任何漂亮的东西。但是,您的字符串输出示例有助于确定。