`
gegewuqin9
  • 浏览: 28878 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

java复制HashMap

阅读更多
我定义HashMap类一般都是用:
Map<String, Object> dataMap = new HashMap<String, Object>();


当想要复制的时候就用下面的方法:
Map<String, Object> cloneMap = (HashMap)((HashMap)dataMap).clone();
分享到:
评论
4 楼 visco 2013-06-30  
gegewuqin9 写道
visco 写道
你这里调Object的clone方法不过是个浅克隆而已~

你去看代码,不只是调用Object的clone方法好不好,是调用的HashMap复写的方法。
/**
     * Returns a shallow copy of this <tt>HashMap</tt> instance: the keys and
     * values themselves are not cloned.
     *
     * @return a shallow copy of this map
     */
    public Object clone() {
        HashMap<K,V> result = null;
	try {
	    result = (HashMap<K,V>)super.clone();
	} catch (CloneNotSupportedException e) {
	    // assert false;
	}
        result.table = new Entry[table.length];
        result.entrySet = null;
        result.modCount = 0;
        result.size = 0;
        result.init();
        result.putAllForCreate(this);

        return result;
    }

你知道什么是深克隆和浅克隆吗?你这里只是克隆了map而已,map里面的元素还是指向原map里的元素的,就是说map里的元素并没有克隆
3 楼 gegewuqin9 2013-06-25  
visco 写道
你这里调Object的clone方法不过是个浅克隆而已~

你去看代码,不只是调用Object的clone方法好不好,是调用的HashMap复写的方法。
/**
     * Returns a shallow copy of this <tt>HashMap</tt> instance: the keys and
     * values themselves are not cloned.
     *
     * @return a shallow copy of this map
     */
    public Object clone() {
        HashMap<K,V> result = null;
	try {
	    result = (HashMap<K,V>)super.clone();
	} catch (CloneNotSupportedException e) {
	    // assert false;
	}
        result.table = new Entry[table.length];
        result.entrySet = null;
        result.modCount = 0;
        result.size = 0;
        result.init();
        result.putAllForCreate(this);

        return result;
    }
2 楼 visco 2013-06-24  
你这里调Object的clone方法不过是个浅克隆而已~
1 楼 visco 2013-06-24  
图样图深破,骚年~ 

相关推荐

    自定义map实现java的hashmap

    在Java编程中,HashMap是一个非常重要的数据结构,它实现了Map接口,提供了键值对的存储功能,具有快速存取和高效查找的特点。HashMap基于哈希表(也称为散列表)原理,通过键对象的哈希码来定位元素,进而实现O(1)...

    在Java8与Java7中HashMap源码实现的对比

    3. resize方法:Java 8的resize方法也有所改进,当数组需要扩容时,不仅会创建新数组,还会将旧数组中的元素分批复制到新数组。同时,由于引入了红黑树,处理树节点的迁移更为复杂,但整体上提高了resize的效率。 ...

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

    extends V&gt; map)`:根据给定的Map复制构造一个新的HashMap。 ### 3. HashMap数据结构 HashMap由一个Entry[]数组(table)构成,每个Entry实际上是一个链表节点,用于处理哈希冲突。HashMap通过“拉链法”解决冲突...

    java-HashMap-loop

    如果需要修改,可以先复制一份`HashMap`的副本,或者使用`ConcurrentHashMap`等线程安全的数据结构。 在实际开发中,理解并正确使用`HashMap`的遍历方式和注意事项对于避免这类问题至关重要。同时,对`equals()`和`...

    java HashMap的keyset实例

    Java中的`HashMap`是一个常用的数据结构,它存储键值对并提供快速的访问速度。`keySet`方法是`HashMap`的一个重要组成部分,它返回一个包含所有键的`Set`视图。这个视图反映了`HashMap`中键的当前状态,任何对这个`...

    通过代码证明HashMap是线程不安全的(只用了一个Java文件)

    在Java编程中,`HashMap`是一个非常常用的集合类,它提供了高效的插入、删除和查找操作。然而,`HashMap`在并发环境下并非线程安全。这个主题通常涉及到多线程编程和Java集合框架的基础知识。本篇文章将通过分析`...

    深入解读大厂java面试必考点之HashMap全套学习资料

    HashMap是Java编程语言中最常用的集合类之一,尤其在面试中,HashMap的相关知识是考察候选人对数据结构和算法理解的重要部分。本套学习资料全面涵盖了HashMap的深入解析,旨在帮助求职者掌握大厂面试中的核心知识点...

    Java核心技术 PDF(文字版 有目录 可以复制粘贴文字)

    4. **数组和集合**:详述一维和多维数组,以及Java集合框架,包括List(如ArrayList和LinkedList)、Set(如HashSet和TreeSet)和Map(如HashMap和TreeMap)的使用。 5. **字符串处理**:讲解String类的特点,字符...

    高级程序员必会的HashMap的线程安全问题,适用于0~2年的.7z

    3. **复制HashMap**:在多线程操作HashMap前,先复制一份副本,然后在线程内部操作副本,操作完毕后再更新原始HashMap。这样可以避免直接操作原HashMap导致的并发问题,但这种方法会增加内存开销。 4. **使用...

    面试必考之HashMap源码分析与实现

    在Java编程语言中,HashMap是集合框架中一个重要的类,用于存储键值对的数据结构。面试中,HashMap的源码分析与实现是一个常见的考察点,因为它涉及到数据结构、并发处理和性能优化等多个核心领域。本篇文章将深入...

    java HashMap 的工作原理详解

    8. **`putAll()` 方法:HashMap 提供了一个 `putAll()` 方法,用于复制另一个 Map 中的所有映射到当前 HashMap 中。这个操作同样会涉及到扩容和哈希计算。 理解这些细节对于深入掌握HashMap的工作原理至关重要,也...

    java提高篇(二三)-----HashMap.pdf

    HashMap是Java编程中非常重要的数据结构之一,它实现了Map接口,并继承了AbstractMap。HashMap以键值对(key-value)的形式存储数据,通过哈希算法高效地定位存储位置,允许快速存取。以下是对HashMap的深入解析: ...

    Redis、Spring、RabbitMQ、Java线程、Mybatis、HashMap、JVM、MySQL相关问题的实例代码

    理解JVM内存模型(堆、栈、方法区等)、垃圾收集机制(如标记-清除、复制、标记-整理和CMS等算法)以及性能调优(如JVM参数调整、监控工具如JConsole的使用)对于提升Java应用性能至关重要。 MySQL是一款关系型...

    JAVA HashMap详细介绍和示例

    extends V&gt; map)`:从给定的Map复制键值对来创建HashMap。 HashMap的主要方法: - `void clear()`:清除所有元素。 - `Object clone()`:返回HashMap的一个副本。 - `boolean containsKey(Object key)`:检查...

    基于共享内存的hashmap

    在实际应用中,基于共享内存的HashMap可能用于分布式缓存、数据库连接池、进程间通信等场景,它的优点在于减少了数据复制的开销,提高了数据交换的效率。然而,由于涉及到多进程的同步,也可能带来额外的复杂性和...

    java面试 集合中知识点 HashMap(JDK1.8)源码+底层数据结构分析 整理.pdf

    **常用方法测试**:HashMap提供了丰富的API供开发者使用,如putAll()用于复制另一个Map的所有映射,remove()用于移除键值对,size()返回元素数量,isEmpty()检查是否为空,等等。 总结,HashMap是Java中非常重要的...

    java单词导入金山打字通

    Java集合框架包括 `Collection` 接口及其子接口如 `List`, `Set`, `Queue`,还有实现类如 `ArrayList`, `LinkedList`, `HashSet`, `HashMap` 等。这些类和接口帮助我们处理和组织对象。`Scanner` 类用于从用户那里...

    Java 的常用包与数组的复制与排序25

    2. `java.util`:这个包提供了各种实用工具类,包括集合框架(如`ArrayList`、`LinkedList`、`HashMap`等)、日期和时间操作(`Date`、`Calendar`)、随机数生成(`Random`)以及泛型工具(`Collections`)等。...

Global site tag (gtag.js) - Google Analytics