Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/402.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 对象的LinkedList和HashMap的LinkedList之间的区别?_Java_Linked List_Hashmap - Fatal编程技术网

Java 对象的LinkedList和HashMap的LinkedList之间的区别?

Java 对象的LinkedList和HashMap的LinkedList之间的区别?,java,linked-list,hashmap,Java,Linked List,Hashmap,我正在编写一些Java代码,但我发现我无法做到: LinkedList<HashMap<String,Object>> errorManagement = new LinkedList<HashMap<String, Object>>(); HashMap<String,Object> i = new HashMap<String,Object>(); errorManagement.add(i.clone()); <

我正在编写一些Java代码,但我发现我无法做到:

LinkedList<HashMap<String,Object>> errorManagement = new LinkedList<HashMap<String, Object>>();
HashMap<String,Object> i = new HashMap<String,Object>();
errorManagement.add(i.clone()); <-- impossible to add the hash map here
LinkedList errorManagement=新建LinkedList();
HashMap i=新的HashMap();

errorManagement.add(i.clone()) 问题在于
clone()
的返回类型:它是
Object
,而不是
HashMap
。这就是为什么第二个代码段有效,但第一个代码段无效

您可以通过构造函数构造哈希映射的副本来修复第一个代码段:

errorManagement.add(new HashMap<String,Object>(i));
errorManagement.add(新HashMap(i));

默认情况下,对象是每个类的父对象,因此HashMap属于Object类型,因此您可以添加对象的子对象,即HashMap

另一件事是克隆返回类型为Object,因此即使您键入cast将其转换回HashMap,您也应该能够执行相同的操作

所以,如果你想摆脱错误,那么你应该改变

 errorManagement.add(i.clone());


您是否已经检查了克隆的返回类型?如果粘贴异常堆栈跟踪,将非常有用。此外:您可以编写
HashMap i=newhashmap()。。。不需要重复类型信息。@EddyG这是一个编译器错误。@MarkoTopolnik好的,那么您必须使用Java 1.6;菱形操作符是用1.7引入的;我刚刚发布的这行代码非常好。@EddyG OP的错误是一个编译器错误。
 errorManagement.add(i.clone());
errorManagement.add((HashMap)i.clone());