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

时间:2015-04-01 14:40:46

标签: 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()); <-- impossible to add the hash map here

如果我想在我的链接列表中添加哈希映射,我会收到一些错误...

我想通过这样做:

HashMap<String,Object> tokenInfo = new HashMap<String,Object>();
LinkedList<Object> errorManagement = new LinkedList<Object>();
errorManagement.add(tokenInfo.clone()); <-- everything working like a charm !

我没有更多的错误。 愿有人解释我为什么吗?有什么区别?

P.S。 :我应该说,在有人问我之前,当我在链接列表中添加任何内容时(第一个示例),错误被抛出!

2 个答案:

答案 0 :(得分:4)

问题是clone()的返回类型:它是Object,而不是HashMap<String,Object>。这就是为什么第二个片段有效,但第一个片段没有。

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

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

答案 1 :(得分:1)

默认情况下,Object是每个类的父级,因此HashMap的类型为Object,因此您可以添加Object的子级,即HashMap。

另一件事是clone返回类型是Object,因此即使你输入它回到HashMap,你也应该能够做到这一点。

因此,如果你想摆脱错误,那么你应该改变

 errorManagement.add(i.clone());

errorManagement.add((HashMap)i.clone());