`
wxb_j2ee
  • 浏览: 138532 次
  • 性别: 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 的常用包与数组的复制与排序24

    `java.util`包则包含了许多实用工具类,如集合框架(ArrayList、LinkedList、HashSet、HashMap等)、日期和时间处理(Date、Calendar)、随机数生成(Random)以及各种实用工具类(Arrays、Collections)。...

    Java中的HashSet详解和使用示例_动力节点Java学院整理

    HashSet的继承关系是:java.lang.Object > java.util.AbstractCollection<E> > java.util.AbstractSet<E> > java.util.HashSet。从这个继承关系可以看出,HashSet继承于AbstractSet,并实现了Set接口。 HashSet与...

    java的一些常用方法及架包版本1.0

    - `java.util.*`:包含各种通用工具类,如集合、日期时间、队列等。 - `java.io.*`:用于输入输出操作。 - `java.nio.*`:非阻塞I/O,性能优于传统`java.io.*`。 - `java.sql.*`:处理数据库连接和SQL操作。 - ...

    jdk1.6源码Ecplise添加

    `java.util.ArrayList`和`java.util.HashMap`是常用的集合类,它们的实现涉及动态数组和哈希表的数据结构;`java.io`包下的类则涵盖了输入输出流的处理,如`FileInputStream`和`PrintWriter`。 通过阅读和学习这些...

    java中的十个大类总结

    6. **`java.lang.Object`**:所有Java类的基类,包含了一些通用方法,如`equals()`、`hashCode()`、`toString()`以及`clone()`等。这些方法在进行对象比较、哈希计算和复制时非常有用。 7. **`java.lang.Thread`**...

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

    6. 一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 一个Java源文件中可以包含多个公共类(public class),但只能有一个公共类,并且文件名必须与该公共类的类名相同。如果一个源文件中没有...

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

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

    Java 208道面试.docx

    - 使用`java.util.Arrays.copyOf()`和`java.util.Collections.copy()`进行数组和集合的拷贝。 8. **Java Web**: - HTTP协议:理解请求和响应的结构,以及常见状态码的意义。 - Servlet和Filter:掌握Servlet...

    JAVA上课笔记class_15

    2. **java.util 包**: - **集合框架**:提供了多种集合接口和实现类,如 `Set`, `List`, `Map` 等。 - `Set`: 用于存储不重复元素的集合,常见实现有 `HashSet`(基于哈希表)和 `TreeSet`(基于红黑树)。 - `...

    java常用集合类总结

    - 使用`java.util.concurrent`包中的并发集合类,如ConcurrentHashMap,可以提高多线程环境下的性能。 总结,Java集合框架提供了丰富的数据结构和操作,满足各种应用场景的需求。理解并熟练运用这些集合类,能有效...

    JAVA经典面试1000问

    常见的包如基础库java.lang、图形用户界面java.awt、输入输出java.io、通用工具类java.util和数据库访问java.sql;常见的接口如远程接口Remote、集合List和Map、文档接口Document和XML节点列表NodeList。 13. **...

    java设计模式

    在Java中,可以利用`Cloneable`接口和`clone()`方法实现。 5. **观察者模式**(Observer):定义对象间的一对多依赖关系,当一个对象的状态改变时,所有依赖于它的对象都会得到通知并自动更新。Java中的`java.util....

    java面试题

    - 编写源程序:源程序是以`.java`为扩展名的文本文件。 - 编译:使用编译器(如`javac`)将源程序编译成以`.class`结尾的字节码文件。 - 运行:编译后的字节码文件通过Java虚拟机(JVM)运行。 3. **Java程序的...

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

    7. 一个`.java`源文件可以包含多个类,但只能有一个公共类(public class),其他的类可以是非公共的。 8. 排序方法:常见的排序算法包括冒泡排序、插入排序、选择排序、快速排序、归并排序等。快速排序的实现通常...

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

    7. **一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制?** - 可以包含多个类,但只能有一个公共类(public class),且该类的名字必须与文件名相同。 8. **排序都有哪几种方法?请列举。用JAVA...

    Java常见你面试题、笔试题(含答案)

    9. **clone()方法**:实现Cloneable接口的类需要重写`clone()`方法,通常包含`super.clone()`调用以创建对象的浅复制。 10. **常用类、包、接口举例**: - 类:ArrayList、HashMap、Thread、File、Socket - 包:...

Global site tag (gtag.js) - Google Analytics