`
wxb_j2ee
  • 浏览: 136208 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java.util.HashMap的clone方法

    博客分类:
  • java
 
阅读更多

1.java.util.HashMap 的 clone 方法是浅层copy,clone出来的对象,仅仅是原来对象的一个引用,并且对克隆出来的对象进行操作是无效的。

下面是个例子:


 

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

/**
 * @author wxb 
 *
 */
public class Test {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub

        HashMap source = new HashMap();
        source.put("key1","value1");
        source.put("key2","value2");
        
        for(Iterator keyItr = source.keySet().iterator();keyItr.hasNext();) {
            Object key = keyItr.next();
            System.out.println(key + " : "+source.get(key));
        }
        System.out.println("----------------- 1 ----------------");
        
        Map targetMap = (HashMap)source.clone();

        for(Iterator keyItr = targetMap.keySet().iterator();keyItr.hasNext();){
            Object key = keyItr.next();
            System.out.println(key + " : "+source.get(key));
        }
        
        System.out.println("---------------- 2 ----------------");
        
        Object temp = targetMap.put("key1","modify");
        System.out.println("temp : "+temp);
        
        for(Iterator keyItr = source.keySet().iterator();keyItr.hasNext();){
            Object key = keyItr.next();
            System.out.println(key + " : "+source.get(key));
        }
    }

}

 

输出结果为:

 

 

key1 : value1
key2 : value2
----------------- 1 ----------------
key1 : value1
key2 : value2
---------------- 2 ----------------
temp : value1
key1 : value1
key2 : value2

 

 

 

2.若想实现深层copy,则需要自己重写clone方法。

 

如下面的例子:

 

 

 

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

/**
 * @author wxb
 * 
 */
public class Test {

	class customHashMap extends HashMap {

		public customHashMap() {
			super();
		}

		public customHashMap(int initialCapacity) {
			super(initialCapacity);
		}

		public Object clone() {
			Map target = new HashMap();
			for (Iterator keyIt = this.keySet().iterator(); keyIt.hasNext();) {
				Object key = keyIt.next();
				target.put(key, this.get(key));
			}
			return target;
		}
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub

		customHashMap source = (new Test()).new customHashMap();
		source.put("key1", "value1");
		source.put("key2", "value2");

		for (Iterator keyItr = source.keySet().iterator(); keyItr.hasNext();) {
			Object key = keyItr.next();
			System.out.println(key + " : " + source.get(key));
		}

		System.out.println("----------------- 1 ----------------");

		Map target = (Map) source.clone();
		target.put("key1", "modify");

		System.out.println("----------------- 2 the souce map print----------------");
		for (Iterator keyItr = source.keySet().iterator(); keyItr.hasNext();) {
			Object key = keyItr.next();
			System.out.println(key + " : " + source.get(key));
		}

		System.out.println("----------------- 3 the target map print----------------");
		for (Iterator keyItr = target.keySet().iterator(); keyItr.hasNext();) {
			Object key = keyItr.next();
			System.out.println(key + " : " + target.get(key));
		}

	}

}

 

输出结果:

 

 

key1 : value1
key2 : value2
----------------- 1 ----------------
----------------- 2 the souce map ----------------
key1 : value1
key2 : value2
----------------- 3 the target map ----------------
key1 : modify
key2 : value2

 

 

资料:

 

http://www.gznc.edu.cn/yxsz/jjglxy/book/Java_api/java/util/HashMap.html

 

分享到:
评论

相关推荐

    yellow-sdk-java

    黄色 Java SDK 这是黄色 Java SDK。 这个简单的 SDK 包含几个功能,可以轻松与 Yellow API 集成。...import java.util.HashMap; public class Demo { public static void main(String[] args) { String apiKey =

    Java 面试宝典

    1、一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? ...... 7 2、Java 有没有 goto? .......................................................................................................

    JAVA核心知识点整理(有效)

    25 JAVA8 与元数据.................................................................................................................................25 2.4. 垃圾回收与算法 .................................

    java面试宝典2012版.pdf

    1、一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 2、Java有没有goto? 3、说说&和&&的区别。 4、在JAVA中如何跳出当前的多重嵌套循环? 5、switch语句能否作用在byte上,能否作用在long上...

    java基础题 很全面

    53. 一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 13 54. java中有几种方法可以实现一个线程?用什么关键字修饰同步方法? stop()和suspend()方法为何不推荐使用? 13 55. java中有几种类型的流?...

    java 面试题 总结

    最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap 就必须为之提供外同步。 Hashtable和HashMap采用的hash/rehash算法都大概...

    Java面试宝典-经典

    2、编写一个程序,将d:\java目录下的所有.java文件复制到d:\jad目录下,并将原来文件的扩展名从.java改为.jad。 62 3、编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串,但要保证...

    java面试题大全(2012版)

    2、编写一个程序,将d:\java目录下的所有.java文件复制到d:\jad目录下,并将原来文件的扩展名从.java改为.jad。 62 3、编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串,但要保证...

    最新Java面试宝典pdf版

    2、编写一个程序,将d:\java目录下的所有.java文件复制到d:\jad目录下,并将原来文件的扩展名从.java改为.jad。 62 3、编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串,但要保证...

    java面试宝典

    42、一个“.java”源文件中是否可以包含多个类(不是内部类)?有什么限制? 12 43、说出一些常用的类,包,接口,请各举5 个。 12 44、Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类?是否可以...

    Java面试笔试资料大全

    2、编写一个程序,将d:\java目录下的所有.java文件复制到d:\jad目录下,并将原来文件的扩展名从.java改为.jad。 62 3、编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串,但要保证...

    java面试宝典2012

    2、编写一个程序,将d:\java目录下的所有.java文件复制到d:\jad目录下,并将原来文件的扩展名从.java改为.jad。 68 3、编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串,但要保证...

    JAVA面试宝典2010

    2、编写一个程序,将d:\java目录下的所有.java文件复制到d:\jad目录下,并将原来文件的扩展名从.java改为.jad。 62 3、编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串,但要保证...

    Java面试宝典2012新版

    2、编写一个程序,将d:\java目录下的所有.java文件复制到d:\jad目录下,并将原来文件的扩展名从.java改为.jad。 62 3、编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串,但要保证...

    Java面试宝典2012版

    2、编写一个程序,将d:\java目录下的所有.java文件复制到d:\jad目录下,并将原来文件的扩展名从.java改为.jad。 62 3、编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串,但要保证...

Global site tag (gtag.js) - Google Analytics