用HashMap存数据,然后赋值给另外一个Map类型的变量,更新另外一个变量后,原始的变量的值也更新了。

目前,我有如下两个变量:Mapmap1=newHashMap();Mapmap2=newHashMap();现在我把map2的值赋给map1,然后更新map1,由于Has... 目前,我有如下两个变量:
Map map1=new HashMap();
Map map2=new HashMap();
现在我把map2的值赋给map1,然后更新map1,由于HashMap好像是地址引用,所以map2的值也被更新了。
但是我希望,更新map1的值,不改变map2的值。不知道有没有哪位大侠有好的办法,帮忙解决下。
展开
 我来答
花落千殇泪
2012-05-11
知道答主
回答量:18
采纳率:50%
帮助的人:6.3万
展开全部
其实这和数组的复制时一样的:从指定源数组中复制一个数组,若是用int[] array1=int[] array2; 那么将来 得到的数组 改变一个 另一个跟着改变 使用System.arraycopy()方法可以实现数组复制。
那么 对于hashMap好像没有这样的方法,但是可以使用遍历hashMap的方法:

public static void main(String[] args) {
Map<Integer,String> map1 = new HashMap<Integer, String>();
for(int i=0;i<10;i++){
map1.put(i, i+"--test");
}
// System.out.println(map1.size());

Map<Integer,String> map2=new HashMap<Integer, String>();
for (int i = 0; i < map1.size(); i++) {
Iterator iter = map1.keySet().iterator();
while (iter.hasNext()) {
Object key = iter.next();
map2.put(i, map1.get(key));
i++;
}
}
}

你可以试验一下 ,应该没有问题的。
PS:为什么一定要把数据copy到新的map里去?给个理由先。这又不是C++,对象脱离作用域就会被销毁。直接把map的引用拿去用不就行了吗?
追问
谢谢,我已经解决了。
您的方法确实是可行的。
至于我为什么要这样,是因为,我需要把一个map1的值,拿来跟多个map去比较,有相同的就删除,不同的就记录下来。所以,第一次比较下来,map1的值就发生了变化,剩下的map再次来比较就不行了。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式