Java 如何显示通用HashMap条目

Java 如何显示通用HashMap条目,java,generics,Java,Generics,我试图理解泛型是如何工作的,我有这段代码来显示一个类的newDetails条目,其中包含这些参数映射。这是我的密码 public class Map<Key,Value> { private Map<Key, Value> entry; public Map(){ entry = new HashMap<Key,Value>(); } public void putEntry(Key k, Value id

我试图理解泛型是如何工作的,我有这段代码来显示一个类的newDetails条目,其中包含这些参数映射。这是我的密码

public class Map<Key,Value> {

    private Map<Key, Value> entry;

    public Map(){
        entry = new HashMap<Key,Value>();
    }

    public void putEntry(Key k, Value id){
        entry.put(k, id);
    }

    public void printMe(){
        System.out.println();
        for (Map.Entry<Key, Value> x: entry.entrySet()){
            System.out.print(x+" ");
        }
    }
}
如何显示实际的条目,如吉百利1号和Hersheys 2号


还有什么方法可以改进main方法或程序的某些部分,因为每次添加新条目时,我都会创建一个新对象。最初我想做的是创建此代码的泛型版本:

Map<List<String>, Integer> newDetails = new HashMap<List<String>, Integer>();
输出为:

[Hersheys] 2[Cadbury] 1
谢谢大家的帮助

更新
printMe(..)
方法
System.out

System.out.print(x.getKey() + " " + x.getValue());
编辑:

public void printMe(){
System.out.println();
for(java.util.Map.Entry x:Entry.entrySet()){
System.out.print(((巧克力)x.getKey()).getlist().get(0)+“”+x.getValue());
}
}
注意:如果
getLists()
为空,则此代码可能抛出
NPE
,更新
printMe(…)
方法
System.out

System.out.print(x.getKey() + " " + x.getValue());
编辑:

public void printMe(){
System.out.println();
for(java.util.Map.Entry x:Entry.entrySet()){
System.out.print(((巧克力)x.getKey()).getlist().get(0)+“”+x.getValue());
}
}
注意:如果
getLists()
Chocolate
类中为null,则此代码可能抛出
NPE

public class Chocolates<T> {

  // ...

  @Override
  public String toString() {
    return listOfChocolate.toString();
  }
}
大众级巧克力{
// ...
@凌驾
公共字符串toString(){
返回chocolate.toString()的列表;
}
}
Chocolate
类中重写:

public class Chocolates<T> {

  // ...

  @Override
  public String toString() {
    return listOfChocolate.toString();
  }
}
大众级巧克力{
// ...
@凌驾
公共字符串toString(){
返回chocolate.toString()的列表;
}
}

您最好不要创建自己的名为
Map
的类。是的,谢谢,最初的名称是MapGenerics,我只是把它删掉了,这样在编辑时就不会占用空间。您最好不要创建自己的名为
Map
的类。是的,谢谢,最初的名字是MapGenerics,我只是把它删掉了,这样当我编辑它时就不会占用空间了。谢谢Nambari!我尝试了你的建议,但它仍然打印相同的东西。嗯,事实上代码没有工作lol它仍然显示胡说八道。嗨nambari它现在工作了,我尝试重新启动我的编辑器,仍然使用你给我的相同代码。我运行了程序,它显示了这个[Hersheys]2[Cadbury]1。谢谢你的帮助。谢谢南巴里!我尝试了你的建议,但它仍然打印相同的东西。嗯,事实上代码没有工作lol它仍然显示胡说八道。嗨nambari它现在工作了,我尝试重新启动我的编辑器,仍然使用你给我的相同代码。我运行了程序,它显示了这个[Hersheys]2[Cadbury]1。谢谢你的帮助。嗨,乔谢谢你的回答,我如何在主程序中使用toString方法?我认为它只会将lisOfChocolate列表转换为字符串,但泛型映射类的参数是Maps newDetails。。。我认为它不会影响任何东西,除非我想显示choco.getList方法的内容。无论何时使用
System.out.print(obj)
,在内部,您实际上是在打印调用
obj.toString
的结果,默认情况下,它会打印类的名称,后跟您看到的hashCode,即
泛型。Chocolates@9931f5
。通过重写
toString
方法,您可以定义自己的字符串,而不是打印那个时髦的字符串。在我的示例中,我正在打印
listCfChocolate
列表的内容,但是您可以返回您喜欢的任何内容。试试看:-)。我明白了,我将尝试找到一种将toString合并到main方法中的方法。谢谢你的提示;)@迪马斯:但同样,您不需要触摸
main
方法。只需将
toString
方法添加到您的
Chocolates
类中即可。嗨,Joao,我在Chocolates类中添加了您的代码,它正确显示了条目。但是我不太明白它是如何工作的,因为我不太擅长注释,我只是假设toString方法是在运行时被编译器调用的,对吗?Hi Joao谢谢你的回答,我如何在主程序中使用toString方法?我认为它只会将lisOfChocolate列表转换为字符串,但泛型映射类的参数是Maps newDetails。。。我认为它不会影响任何东西,除非我想显示choco.getList方法的内容。无论何时使用
System.out.print(obj)
,在内部,您实际上是在打印调用
obj.toString
的结果,默认情况下,它会打印类的名称,后跟您看到的hashCode,即
泛型。Chocolates@9931f5
。通过重写
toString
方法,您可以定义自己的字符串,而不是打印那个时髦的字符串。在我的示例中,我正在打印
listCfChocolate
列表的内容,但是您可以返回您喜欢的任何内容。试试看:-)。我明白了,我将尝试找到一种将toString合并到main方法中的方法。谢谢你的提示;)@迪马斯:但同样,您不需要触摸
main
方法。只需将
toString
方法添加到您的
Chocolates
类中即可。嗨,Joao,我在Chocolates类中添加了您的代码,它正确显示了条目。然而,我不太明白它是如何工作的,因为我不擅长注释,我只是假设toString方法是在运行时由编译器调用的,对吗?
[Hersheys] 2[Cadbury] 1
System.out.print(x.getKey() + " " + x.getValue());
 public void printMe(){
        System.out.println();
        for (java.util.Map.Entry<Key, Value> x: entry.entrySet()){
            System.out.print(((Chocolates)x.getKey()).getLists().get(0) +" "+x.getValue());
        }
    }
public class Chocolates<T> {

  // ...

  @Override
  public String toString() {
    return listOfChocolate.toString();
  }
}