hashmap中的clone为什么是shallow copy of this map

问题描述

public Object clone() { HashMap<K,V> result = null;try { result = (HashMap<K,V>)super.clone();} catch (CloneNotSupportedException e) { // assert false;} result.table = new Entry[table.length]; result.entrySet = null; result.modCount = 0; result.size = 0; result.init(); result.putAllForCreate(this); return result; }新建Entry,把原来Entry中数据放到新的Entry中。新的HashMap与旧的HashMap操作没有关系了,为什么还是shallow?

解决方案

javadoc上说得很清楚呀引用 /** * Returns a shallow copy of this <tt>HashMap</tt> instance: the keys and * values themselves are not cloned. * * @return a shallow copy of this map */
解决方案二:
HashMap hm = new HashMap();HashMap hm1 = new HashMap();hm1.put("A", "AA");hm.put(1, "A");hm.put(2, hm1);Object hmc = hm.clone();hm1.put("A", "AAA");hm1.put("B", "BBB");System.out.println(hm.toString());System.out.println(hmc.toString());hm:{1=A, 2={A=AAA, B=BBB}}hmc:{1=A, 2={A=AAA, B=BBB}}
解决方案三:
因为里边的数据还是同一个,所以还是浅拷贝深拷贝是子子孙孙都要复制

时间: 2024-10-16 05:40:47

hashmap中的clone为什么是shallow copy of this map的相关文章

map-HashMap中的clone问题

问题描述 HashMap中的clone问题 @Test public void cloneMapTest() throws Exception { HashMap<User,Integer> map=new HashMap<User,Integer>(); map.put(new User("wang", 11),1); map.put(new User("hao", 12),2); map.put(new User("wan&qu

C# Tips-浅拷贝和深拷贝(shallow copy VS deep copy )

引言 C#中有两种类型变量,一种 是值类型变量,一种是引用类型变量,对于值类型变量,深拷贝和前拷贝都是通过赋值操作符号(=)实现,其效果一致,将对象中的值类型的字段拷贝到新的对象中.这个很容易理解. 本文重点讨论引用类型变量的拷贝机制和实现. C#中引用类型对象的copy操作有两种: 浅拷贝(影子克隆/shallow copy):只复制对象的值类型字段,对象的引用类型,仍属于原来的引用. 深拷贝(深度克隆):不仅复制对象的值类型字段,同时也复制原对象中的对象.就是说完全是新对象产生的. 浅拷贝和

.NET深入学习笔记(4):深拷贝与浅拷贝(Deep Copy and Shallow Copy)

今天继续利用准备WSE安全开发文章的空闲时间,完善<.NET深入学习笔记>系列(基本都是.Net重要的知识点,我都做了详细的总结,是什么.为什么.和怎么实现).想必很多人也接触过这两个概念.做过C++的人对深浅拷贝的概念一定不会陌生.而其很多C#高级软件工程师的面试里也会问到深浅拷贝相关的问题.我今天就在总结一下,并且添加了详细的代码实现,与大家分享.一起学习一下C#的深拷贝与浅拷贝(Deep Copy and Shallow Copy)的机制.全文还是分三部分:1.基本概念 2.深拷贝与浅拷

浅复制(Shallow Copy)与深复制(Deep Copy)

复制:对象的复制是生成一个与指定对象完全一样的新对象,实现的方式根据定义可以知道,新建一个类型相同的对象,然后复制原对象的每一个成员和字段.  浅复制: class Program { static void Main(string[] args) { ClassA A = new ClassA(); CloneObj clone = new CloneObj(); ClassA newA= clone.CloneA(A); } } public class ClassA { public In

关于shallow copy

shallow copy (浅拷贝)是一种节省资源的方式,是一种write_on_copy,qt中很多的类(大部分是内存分配需要很多的类)都实现了shallow copy,比如 qimage类,让两个实例qimage a和qimage b,令a=b,则事实上,a并没有完全复制了一份b的所有信息,它只是在计数器上增加了一个对同一片内存的指向(当然也并非指针相等),如果a和b之中没有人进行改变,将一直共享一份内容,但当其中过一个发生改变时,它会自动复制一份这份信息的内容,作为自己的无论怎样修改都行,

java求几个hashmap中key的并集,输出value

问题描述 java求几个hashmap中key的并集,输出value 现有几个hashmap,可能有相同的key,但是value不同,求key的并集, 并输出在不同hashmap中的不同value,若不存在则为-1 比如hashmap1{(我,1),(你,2),(他,3),(它,4)} hashmap2{(猴,1)(狗,3)(你,4)(他,5)} hashmap3{(猴,10)(牛,2)(狗,5)(猪,4),(它,8)} hashmap4{(我,5),(牛,6)} 输出为 key hashmap

list中筛选hashmap-有一个List里面包涵了若干个HashMap,筛选出HashMap中的4条记录组成一个新List

问题描述 有一个List里面包涵了若干个HashMap,筛选出HashMap中的4条记录组成一个新List 筛选规则:如果status为2的有四条以上记录则按projectId从大到小筛选4条,如果status=2不足,剩余部分从status=3中取,按projectId从大到小排序,以此类推..(求大神帮忙)list如下[{status=2 projectId=70} {status=3 projectId=69}{status=3 projectId=68}{status=3 project

arraylist-将所有值放到hashmap中

问题描述 将所有值放到hashmap中 有一个arraylist.我要将所有数组值放到哈希表中,但是问题是我得到的结果是数组列表的最后一个指针值.代码: ArrayList<String> imagesFileName = new ArrayList<String>(); public String[] filename; public static final String FILE_NAME = "filename"; public static final

java-在 HashMap 中储存不同类型的参数

问题描述 在 HashMap 中储存不同类型的参数 我使用下面的代码: public boolean initialSetupDone; public Currency defaultCurrency; public String userId; final String kProfileSetupDoneKey = "kProfileSetupDone"; final String kDefaultCurrencyKey = "kDefaultCurrency";