【发布时间】:2014-01-12 18:40:51
【问题描述】:
在我的例子中,我有这个来操作给定 HashMap 的浅拷贝
public class SomeClass
{
private HashMap<String, String> hashMap;
public SomeClass( private HashMap<String, String> hashMap )
{
this.hashMap = (HashMap<String, String>) hashMap.clone();
}
}
但是 eclipse 建议我提取到局部变量或方法或添加演员表,当我这样做时,它一直建议我相同的解决方案:)
我已经来到this post,从接受的答案中我觉得不太清楚
“新的 HashMap 创建调用正在浪费内存”
当我将其应用于我的代码时,我将拥有
if(songData.clone() instanceof HashMap)
{
this.songData = (HashMap<String, String>) songData.clone();
}
我发现调用clone() 两次会消耗更多的过程。
有没有更好的方法来做到这一点?我的 sn-p 会不会对资源有害?
【问题讨论】:
-
“你用新的HashMap创建调用浪费内存”是指
private Map<String, String> someMap = new HashMap<String, String>();中的new你的代码没有这个问题。 -
从逻辑上讲,您不需要在这里检查
instanceof,因为HashMap#clone()将始终返回HashMap类型的对象。但是,由于它间接覆盖了Object#clone(),因此HashMap#clone()方法的实际返回类型是Object而不是HashMap,这就是您收到警告的原因。我个人不会担心这个警告。 -
是的,谢谢,有没有更好的方法来从内存、速度和可靠性方面实现这一目标?
-
我可能只使用
new HashMap<String, String>(hashMap)而不是使用clone(): stackoverflow.com/questions/2356809/…
标签: java eclipse performance hashmap shallow-copy