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

peichengguo 2012-04-28 10:40:57
目前,我有如下两个变量:
Map map1=new HashMap();
Map map2=new HashMap();
现在我把map2的值赋给map1,然后更新map1,由于HashMap好像是地址引用,所以map2的值也被更新了。
但是我希望,更新map1的值,不改变map2的值。哪位高手有好点的办法,来备份一个原始的值的,帮忙解决下。谢谢啦。
...全文
1970 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
_jerrytiger 2012-05-11
  • 打赏
  • 举报
回复
Map map1 = new HashMap();
map1.put("a" , 1);
map2.put("b" , 2);

Map map2 = new HashMap(map1);
map2.put("c" , 3);

System.out.println(map1);
System.out.println(map2);


Console :
{b=2, a=1}
{ b=2, c=3, a=1}
peichengguo 2012-05-11
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 的回复:]

Java code

public class Dbclass implements Cloneable {
public String name;

public Object clone() {
Dbclass ta = null;
try {
ta = (Dbclass) super.clone();

……
[/Quote]
这个忘记加了。呵呵。感谢感谢!
sdojqy1122 2012-05-02
  • 打赏
  • 举报
回复
	public static void main(String args[]) {
HashMap map1 = null;
HashMap map2 = new HashMap();
map2.put("1", "Hello");map2.put("2", "World");
map1 =(HashMap)map2.clone();
System.out.println(map1);
System.out.println(map2);
map1.put("1",(String)map1.get("1") + "World");
System.out.println(map1);
System.out.println(map2);
}
shadow4222 2012-05-02
  • 打赏
  • 举报
回复

HashMap map1 = new HashMap();
HashMap map2 = new HashMap();
for(Iterator it = map1.keySet().iterator() ; it.hasNext();){
String key = it.next().toString();
map2.put(key, map1.get(key));
}
安特矮油 2012-05-02
  • 打赏
  • 举报
回复
深度clone一份map
sffx123 2012-05-02
  • 打赏
  • 举报
回复
Map map3 = new HashMap();
map3 = map2;
这样就把map2用map3给保存了。之后再改变map2对map3没影响,建议楼主好好理解一下对象跟句柄或者引用的具体含义,感觉你有点乱这块。
sdojqy1122 2012-05-02
  • 打赏
  • 举报
回复

public class Dbclass implements Cloneable {
public String name;

public Object clone() {
Dbclass ta = null;
try {
ta = (Dbclass) super.clone();

} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return ta;
}
public static void main(String args[]){
Dbclass ta1 = new Dbclass();
Dbclass ta2 = new Dbclass();
ta1.name = "ta1";
ta2 = (Dbclass)ta1.clone();//这个,楼主你写clone()不使用?
ta2.name = "ta2";
System.out.println("ta1:" + ta1.name);
System.out.println("ta2:" + ta2.name);
}
}
peichengguo 2012-05-02
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]
深度clone一份map
[/Quote]
我写了一个clone的例子,不知道怎么回事,就是没有起作用。不知自己哪里写错了。
例子如下:
public class Dbclass implements Cloneable {
public String name;
public Object clone(){
Dbclass ta=null;
try{
ta=(Dbclass)super.clone();

}catch(CloneNotSupportedException e){
e.printStackTrace();
}
return ta;
}
}

public void CloneTest() throws Exception{
Dbclass ta1=new Dbclass();
Dbclass ta2=new Dbclass();
ta1.name="ta1";
ta2=ta1;
ta2.name="ta2";
System.out.println("ta1:"+ta1.name);
System.out.println("ta2:"+ta2.name);
}
peichengguo 2012-05-02
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]
Java code

HashMap map1 = new HashMap();
HashMap map2 = new HashMap();
for(Iterator it = map1.keySet().iterator() ; it.hasNext();){
String key = it.next().toString();
……
[/Quote]
这个方法还很好用,谢谢啦。
Pomelo828 2012-05-02
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
Map map3 = new HashMap();
map3 = map2;
这样就把map2用map3给保存了。之后再改变map2对map3没影响,建议楼主好好理解一下对象跟句柄或者引用的具体含义,感觉你有点乱这块。
[/Quote]
你去试试?
达达拉 2012-04-28
  • 打赏
  • 举报
回复
不要把mp2 的值赋给 mp1,java 的 = 号是句柄赋值,你把 mp1 = mp2;后,两个都指向同一个值了,mp1 改变 mp2 也会改变。所以你要两个互不干扰,不能用 = 赋值,只能把里面的东西拿出来,再放到另一个里面。

50,523

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧