在我的情况下,我有这个来操纵给定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();
}
我发现cosume更多的过程是调用clone()
两次。
有更好的方法吗?我的代码片段可能对资源有害吗?
答案 0 :(得分:1)
不要使用克隆。 clone()
是一种设计糟糕的方法,需要对被克隆的对象有太多的了解,并且用户通常也会错误地实现。 (有关此内容的详细信息,请参阅 Effective Java )
复制地图的最佳方法是使用相同的数据创建新地图:
public SomeClass( HashMap<String, String> hashMap )
{
this.hashMap = new HashMap<String,String>(hashMap);
}
同样作为FYI,public SomeClass( private HashMap<String, String> hashMap )
无法编译。您不能拥有private
关键字的参数。从参数中删除“私有”。
你在使用新的HashMap调用浪费内存
这是您引用的其他帖子的答案,因为他们的代码是:
private Map<String, String> someMap = new HashMap<String, String>();
someMap = (HashMap<String, String>)...
通过调用someMap
创建new Hashmap()
,但该引用立即被替换为不同的HashMap。
这与你的问题无关,所以你可以忽略它。