Java 映射-不断获取哈希代码,而不是访问值

Java 映射-不断获取哈希代码,而不是访问值,java,Java,我创建了一张地图,如下所示: private Map<String, List<Client>> clientCatalogue; this.clientCatalogue = new TreeMap<String, List<Client>>(); 私有地图客户端目录; this.clientcatalog=newtreemap(); 键是客户端名称,值是客户端详细信息的列表 我正在使用keySet()对其进行迭代。我希望每次访问与键关联的每

我创建了一张地图,如下所示:

private Map<String, List<Client>> clientCatalogue;
this.clientCatalogue = new TreeMap<String, List<Client>>();
私有地图客户端目录;
this.clientcatalog=newtreemap();
键是客户端名称,值是客户端详细信息的列表

我正在使用keySet()对其进行迭代。我希望每次访问与键关联的每个值列表,然后在转到下一个值列表之前对每个值进行进一步处理。我已经将这些值复制到一个列表类型变量(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);
}
列出客户端详细信息;
clientDetails=newarraylist();
for(字符串eachClient:this.clientcatalog.keySet())
{
clientDetails=clientcatalog.get(每个客户端);
System.out.println(“客户的详细信息为:“+clientDetails”);
}

您应该重写客户机类中的toString()方法。当您试图通过sysout打印任何对象时,将调用其toString方法,在您的情况下,将调用该对象类的toString方法。因此,您需要在
客户机
类中实现
toString()
,以返回您希望看到打印的详细信息。

TreeMap从AbstractMap继承了它的toString方法,它看起来将尝试输出映射的漂亮表示形式,但是,如果您没有给出clientDetails的toString实现,您将不会得到任何漂亮的结果。不过,字符串输出的示例有助于确定答案。

尝试以下方法:

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

您知道不需要在单独的行上声明和初始化变量,对吗?如果您只想使用键查找值,您可以迭代
values()
。如果两者都需要,请迭代
entrySet()
for (List<Client> clientDetails : this.clientCatalogue.values())
{
    for(Client cl : clientDetails)
    {    
         System.out.println("Details of client are: " + cl.toString());
    }
}