`
ppju
  • 浏览: 79785 次
  • 性别: Icon_minigender_1
  • 来自: 西安
文章分类
社区版块
存档分类
最新评论

Overload the HashMap clone()

阅读更多
Yesterday I found that I cannot clone the HashMap rightly through the clone() of HashMap. After cloning, The origin HashMap Object also can be modified by clone HashMap. That's a serious problem in the system.

I take a investigation on it and find the answer.The following is the solution.

Cause: the HashMap's clone is a shallow clone.If you want to get a deep one, must overrite the clone method by yourself.

The following codes is my example.Remember that should take the generic type to code it.

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;

/**
 * @author ppju
 * @param <K,V>
 *
 */
public class CloneHashMap<K,V> extends HashMap<K, V>{

	private static final long serialVersionUID = -6550003591342797010L;
	
	public Object clone(){
		HashMap<K,V> cloneMap = new HashMap<K,V>();
		Iterator<Entry<K, V>> it = this.entrySet().iterator();
		while(it.hasNext()){
			Map.Entry<K, V> entry = it.next();
			K key = entry.getKey();
			V value = entry.getValue();
			cloneMap.put(key, value);
		}
		return cloneMap;
	}
	
	

	public static void main(String[] args){
		CloneHashMap<String, String> test = new CloneHashMap<String, String>();
		test.put("1", "-----");
		test.put("2", "-----");
		
		Map<String, String> clone = (Map<String, String>)test.clone();
		clone.put("1", "sjflajsl");
		
		System.out.println(test.toString());
		System.out.println(clone.toString());
                System.out.println(test.toString());
		
	}
	
	
}


Welcome to propose your comments. Thank you.
0
0
分享到:
评论

相关推荐

    BTA 常问的 Java基础39道常见面试题及详细答案.docx

    包括equals()、hashCode()、toString()、clone()、finalize()等,它们是所有类的基类Object提供的。 7. **Java的四种引用**: 强引用、软引用、弱引用、虚引用,分别对应不同的垃圾回收策略,适用于内存管理的...

    JAVA 面试题

    13. **Object类有哪些方法:** Object是Java所有类的根类,包含wait()、notify()、notifyAll()、clone()、getClass()、hashCode()、toString()等基本方法。 14. **Java是属于静态语言还是动态语言:** Java是一种...

    Java面试宝典_2018---1

    hashCode()主要用于哈希表,如HashMap,相同对象的hashCode应相同以保证哈希表的正确工作。然而,不同对象可以有相同的hashCode,这不会违反哈希表的规则。 String类在Java中是final的,不能被继承。这是因为String...

    Java面试指南.pdf

    - OverLoad与Override的区别:OverLoad是方法的重载,即在同一个类中可以存在多个同名方法,只要它们的参数列表不同;Override是方法的重写,子类重写父类的方法。 除此之外,本指南还涉及到了Collection与...

    面试指南java

    - OverLoad与Override的区别:明确方法重载(Overload)和方法覆盖(Override)之间的区别。 - Collection与Collections的区别:知道Collection是集合框架的根接口,而Collections是一个工具类。 第三部分:Java...

    Java面试题,自己查看学习的程度

    9. `Overload`和`Override`的区别:`Overload`是重载,发生在同一类中,方法名相同但参数列表不同;`Override`是重写,发生在子类中,方法名、参数列表和返回类型必须与父类一致。 10. `final`类的特点:`final`类...

    java面试宝典

    10. **OverLoad与Override的区别**:Overload是方法重载,Override是方法重写。 11. **Collection与Collections的区别**:Collection是集合类的根接口,Collections是包含集合操作工具方法的类。 12. **Class.for...

    技术面试题汇总

    - 在`clone()`方法中,通常会有`super.clone()`调用,以确保正确克隆对象。 **49. 在JAVA中,如何跳出当前的多重嵌套循环?** - 可以使用标签化的`break`语句来跳出多重嵌套循环。 **50. List、Map、Set三个接口,...

    CoreJava_面试题

    50. HashMap和Hashtable都是Map接口的实现类,但Hashtable是线程同步的,而HashMap不是,并且HashMap允许有null键和null值,Hashtable不允许。 以上是Java基础面试题中涉及的一些主要知识点,对于初学者和即将面试...

    W3School离线手册

    实现 `clone()` 方法时通常会调用 `super.clone()` 来完成克隆过程。需要注意的是,调用 `super.clone()` 前应该确保当前对象是可克隆的,并且需要处理可能抛出的 `CloneNotSupportedException` 异常。 ### 3. 封装...

    JAVA面试指南

    - **重载(Overload)**:同一个类中方法名相同但参数不同的方法。 - **覆盖(Override)**:子类重写父类的方法,方法名、参数列表和返回类型都必须相同。 - **4.11 Collection与Collections的区别:** - `...

    金九银十Java综合面试总结.pdf

    12. **HashMap的差异**:在JDK1.7中,HashMap基于数组+链表实现,JDK1.8引入了红黑树,当链表长度超过8时,会转换为红黑树,提高了查找效率。 13. **ConcurrentHashMap**:ConcurrentHashMap是线程安全的哈希映射,...

    Java企业级开发综合技能知识总结

    // If current element is smaller than the pivot if (arr[j] ) { i++; // swap arr[i] and arr[j] int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } } // swap arr[i+1] and arr[high] (or ...

    java经典面试题

    - `clone()`:创建并返回该对象的一个副本。 - `notify()` 和 `notifyAll()`:唤醒正在等待此对象监视器的线程。 - `wait()`:导致当前线程等待这个对象的监视器。 - `finalize()`:垃圾回收前调用,可以用来...

    java基础刷题知识点总结.pdf

    - `clone()`:保护类型,创建并返回对象的一个副本。实现 Cloneable 接口才能避免 CloneNotSupportedException。 - `equals()`:比较对象是否相等,通常用于判断两个对象的内容是否一致。 - `finalize()`:保护...

    2014年Java最全面试题以及答案.

    HashMap和Hashtable都实现了Map接口,HashMap非线程安全,可以接受null键和多个null值;Hashtable线程安全,不允许null键和值。 46. Collection和Collections的区别。 Collection是一个集合框架的主要接口,包括...

    Java面试题以及答案

    - **重载(Overload)**:在同一个类中定义多个同名的方法,但参数列表不同。 - **重写(Override)**:在子类中定义一个与父类同名的方法,参数列表完全相同,以覆盖父类的方法。 - **返回值类型**:重载的方法可以有...

    Java面试宝典

    - **举例**: `Integer`可以用作`HashMap`的键。 **1.15 `Math.round()`函数的行为** - **知识点**: `Math.round(11.5)`结果为`12`,`Math.round(-11.5)`结果为`-11`。 - **解释**: `Math.round()`方法对小数点后第...

Global site tag (gtag.js) - Google Analytics