[英]Difference between linkedhaspmap and linkedhashmap<Integer,String>
我创建了两个地图,如下所示。 谁能解释一下为什么程序的输出是这样的,为什么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
您在问题中输入的输出不是此代码实际产生的输出,即:
1-----INDIA
2-----USA
3-----RUSSIA
------------------
1-----INDIA
2-----USA
第二个 Map 具有 String 键和 String 值。 因此,仅适用于第二个 Map mymap.remove("3");
从地图中删除一个条目。
mymap.remove("3");
通过编译,即使mymap
是LinkedHashMap<Integer, String>
,因为remove
接受Object
类型的参数。
由于向后兼容, deleteContent
允许您将原始LinkedHashMap
类型传递给它。 您可能有返回原始类型的旧(Java 5 之前)方法,因此您可以将它们传递给需要参数化类型的较新方法。
好吧, 3
与"3"
(一个是Integer
,另一个是String
)——这就是输出不同的原因——第一个映射没有要删除的键。
代码实际编译对我来说也是一个惊喜。 我想这是不再使用原始类型的另一个原因。
另外,对我来说,输出是
1-----INDIA
2-----USA
3-----RUSSIA
------------------
1-----INDIA
2-----USA
反之亦然。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.