拷贝
深拷贝和浅拷贝是只针对Object和Array这样的引用数据类型的。
大致示意图如下:

浅拷贝
浅拷贝只复制指向某个对象的指针,而不复制对象本身,新旧对象还是共享同一块内存。
深拷贝
深拷贝会另外创造一个一模一样的对象,新对象跟原对象不共享内存,修改新对象不会改到原对象。
HashMap拷贝方式
Map<k,v> copyMap = new HashMap<k,v>();
方式一
Map<k,v> valueMap = copyMap;
方式二
Map<k,v> valueMap = new HashMap(copyMap);
方式三
Map<k,v> valueMap = copyMap.clone();
方式四
遍历拷贝值
Map<k,v> valueMap = new HashMap();
Iterator<Map.Entry<k, v>> entries = copyMap .entrySet().iterator();
while (entries.hasNext()) {
Map.Entry<K, V> entry = entries.next();
K key = entry.getKey();
V value = entry.getValue();
valueMap.put(key , value );
}
方式五
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.6</version>
</dependency>
Map<K, V> propertiesMap = (HashMap<K, V>) SerializationUtils.clone(copyMap);
HashMap拷贝方式的不同
方式一、二、三都算是浅拷贝,即新、旧Map,其中一个Map改动值,另一个Map的值也会随着改变,这个值是指对象,String类型不在此考虑
方式四,若是k和v就直接=,就是浅拷贝,若是赋值到新的v对象,则深拷贝
方式五需要对象及对象类中的属性对象都要实现Serializable,否则会报异常。