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
分享到:
相关推荐
黄色 Java SDK 这是黄色 Java SDK。 这个简单的 SDK 包含几个功能,可以轻松与 Yellow API 集成。...import java.util.HashMap; public class Demo { public static void main(String[] args) { String apiKey =
`java.util`包则包含了许多实用工具类,如集合框架(ArrayList、LinkedList、HashSet、HashMap等)、日期和时间处理(Date、Calendar)、随机数生成(Random)以及各种实用工具类(Arrays、Collections)。...
HashSet的继承关系是:java.lang.Object > java.util.AbstractCollection<E> > java.util.AbstractSet<E> > java.util.HashSet。从这个继承关系可以看出,HashSet继承于AbstractSet,并实现了Set接口。 HashSet与...
- `java.util.*`:包含各种通用工具类,如集合、日期时间、队列等。 - `java.io.*`:用于输入输出操作。 - `java.nio.*`:非阻塞I/O,性能优于传统`java.io.*`。 - `java.sql.*`:处理数据库连接和SQL操作。 - ...
`java.util.ArrayList`和`java.util.HashMap`是常用的集合类,它们的实现涉及动态数组和哈希表的数据结构;`java.io`包下的类则涵盖了输入输出流的处理,如`FileInputStream`和`PrintWriter`。 通过阅读和学习这些...
6. **`java.lang.Object`**:所有Java类的基类,包含了一些通用方法,如`equals()`、`hashCode()`、`toString()`以及`clone()`等。这些方法在进行对象比较、哈希计算和复制时非常有用。 7. **`java.lang.Thread`**...
6. 一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 一个Java源文件中可以包含多个公共类(public class),但只能有一个公共类,并且文件名必须与该公共类的类名相同。如果一个源文件中没有...
25 JAVA8 与元数据.................................................................................................................................25 2.4. 垃圾回收与算法 .................................
- 使用`java.util.Arrays.copyOf()`和`java.util.Collections.copy()`进行数组和集合的拷贝。 8. **Java Web**: - HTTP协议:理解请求和响应的结构,以及常见状态码的意义。 - Servlet和Filter:掌握Servlet...
2. **java.util 包**: - **集合框架**:提供了多种集合接口和实现类,如 `Set`, `List`, `Map` 等。 - `Set`: 用于存储不重复元素的集合,常见实现有 `HashSet`(基于哈希表)和 `TreeSet`(基于红黑树)。 - `...
- 使用`java.util.concurrent`包中的并发集合类,如ConcurrentHashMap,可以提高多线程环境下的性能。 总结,Java集合框架提供了丰富的数据结构和操作,满足各种应用场景的需求。理解并熟练运用这些集合类,能有效...
常见的包如基础库java.lang、图形用户界面java.awt、输入输出java.io、通用工具类java.util和数据库访问java.sql;常见的接口如远程接口Remote、集合List和Map、文档接口Document和XML节点列表NodeList。 13. **...
在Java中,可以利用`Cloneable`接口和`clone()`方法实现。 5. **观察者模式**(Observer):定义对象间的一对多依赖关系,当一个对象的状态改变时,所有依赖于它的对象都会得到通知并自动更新。Java中的`java.util....
- 编写源程序:源程序是以`.java`为扩展名的文本文件。 - 编译:使用编译器(如`javac`)将源程序编译成以`.class`结尾的字节码文件。 - 运行:编译后的字节码文件通过Java虚拟机(JVM)运行。 3. **Java程序的...
7. 一个`.java`源文件可以包含多个类,但只能有一个公共类(public class),其他的类可以是非公共的。 8. 排序方法:常见的排序算法包括冒泡排序、插入排序、选择排序、快速排序、归并排序等。快速排序的实现通常...
7. **一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制?** - 可以包含多个类,但只能有一个公共类(public class),且该类的名字必须与文件名相同。 8. **排序都有哪几种方法?请列举。用JAVA...
9. **clone()方法**:实现Cloneable接口的类需要重写`clone()`方法,通常包含`super.clone()`调用以创建对象的浅复制。 10. **常用类、包、接口举例**: - 类:ArrayList、HashMap、Thread、File、Socket - 包:...