我创建了两个地图,如下所示。任何人都可以解释为什么程序的输出是这样的,为什么deletecontent方法允许我传递mymap2? 创建mymap和mymap2之间的区别
public class Candidate {
public static void main(String[] args) {
// TODO Auto-generated method stub
LinkedHashMap<Integer, String> mymap= new LinkedHashMap<Integer, String>();
mymap.put(1, "INDIA");
mymap.put(2, "USA");
mymap.put(3, "RUSSIA");
LinkedHashMap mymap2= new LinkedHashMap();
mymap2.put("1", "INDIA");
mymap2.put("2", "USA");
mymap2.put("3", "RUSSIA");
deleteContent(mymap);
deleteContent(mymap2);
print(mymap);
System.out.println("------------------");
print(mymap2);
}
private static void print(LinkedHashMap<Integer, String> mymap) {
for (Entry<Integer, String> e: mymap.entrySet()) {
System.out.println(e.getKey()+"-----"+ e.getValue());
}
}
private static void deleteContent(LinkedHashMap<Integer, String> mymap) {
// TODO Auto-generated method stub
mymap.remove("3");
}
}
output of the below program is
1-----INDIA
2-----USA
------------------
1-----INDIA
2-----USA
3-----RUSSIA
答案 0 :(得分:0)
您在问题中输出的输出不是此代码实际产生的输出,即:
1-----INDIA
2-----USA
3-----RUSSIA
------------------
1-----INDIA
2-----USA
第二个Map具有String键和String值。因此,仅针对第二个地图mymap.remove("3");
从地图中删除条目。
mymap.remove("3");
已通过编译,即使mymap
为LinkedHashMap<Integer, String>
,因为remove
接受Object
类型的参数。
deleteContent
允许您将原始LinkedHashMap
类型传递给它。您可能有旧的(pre-Java 5)方法返回原始类型,因此您可以将它们传递给期望参数化类型的新方法。
答案 1 :(得分:0)
好吧,3
与"3"
不同(一个是Integer
,另一个是String
) - 这就是输出不同的原因 - 第一个地图没有要删除的密钥。
代码实际编译对我来说也是一个惊喜。我猜这是不再使用原始类型的另一个原因。
另外,对我来说输出是
1-----INDIA
2-----USA
3-----RUSSIA
------------------
1-----INDIA
2-----USA
不是相反。