`

hashmap的正确使用方法

阅读更多

近期发生太多关于集合类使用不当导致的bug, 在此记录下关于hashmap的信息。

 

https://gist.github.com/1081908

http://www.iteye.com/topic/962172

http://blog.sina.com.cn/s/blog_5465f7f20100tugf.html

http://blog.csdn.net/cleverpig2003/article/details/249844

 

问题列表:

1. hashmap.get() 导致cpu100%

2. hashmap.get()值不正确

……

 

剖析:

1. hashmap是非线程安全,所以也无须谈其数据是否正确。

2. 高并发下,hashmap的设计,可能会导致链表闭环。(可看hashmap的源码,hash冲突和动态扩容)

3. hashmap动态扩容的成本。大数据量的put,在没有设定容量的情况下,会有些问题.

 

建议:

1. 多看集合类的源码实现

2. 多看java.util.concurrent.*

 

 

分享到:
评论

相关推荐

    C++hashmap的使用实例

    在C++编程中,`hashmap`通常指的是`std::unordered_map`,它是一个关联容器,提供了基于哈希表的键值对存储。这个数据结构允许我们以接近常数时间的复杂度进行插入、查找和删除操作,极大地提高了程序的执行效率。...

    hashmap实现原理

    当两个键的`hashCode()`相同,HashMap会使用`equals()`方法来比较键的等价性,从而确定键值对在链表中的位置。 在Java中,HashMap的初始化涉及两个重要属性:initialCapacity(初始容量)和loadFactor(负载因子)...

    java HashMap原理分析

    Java HashMap原理分析 Java HashMap是一种基于哈希表的数据结构,它的存储原理是通过将Key-Value对存储在一个数组中...HashMap的实现需要正确地实现hashCode和equals方法,以避免哈希碰撞问题和equals方法的调用问题。

    HashMap的数据结构

    9. ** equals() 和 hashCode()**:插入HashMap的键对象必须正确地重写`equals()`和`hashCode()`方法,以确保键的比较逻辑与哈希码的计算一致,否则可能会导致预期之外的行为。 10. **resize()**:当HashMap达到其...

    简单的key value hashmap

    哈希映射(HashMap)是Java编程语言中一个非常重要的数据结构,它在《简单的key value hashmap》中被提及,通常用于存储键值对(key-value pairs)...因此,合理选择数据结构以及正确使用HashMap是优化程序性能的关键。

    Java中HashMap的工作机制

    在Java中,正确地使用hashCode()和equals()方法是非常重要的。在重写equals()方法时,必须同时重写hashCode()方法,以保证相等的对象拥有相同的哈希码。这样,当在使用HashMap这类集合时,才能确保对象的唯一性不会...

    Java中HashMap详解(通俗易懂).doc

    1. **哈希函数**:HashMap使用键对象的hashCode()方法生成哈希码,这个哈希码用于确定元素在内部数组中的位置。哈希函数的目标是尽可能地将不同的键映射到不同的桶,以减少冲突。 2. **哈希冲突解决**:尽管哈希...

    关于如何解决HashMap线程安全问题的介绍

    1. 使用Collections.synchronizedMap():Java提供了一个便捷的方法,通过Collections.synchronizedMap()可以将HashMap转换为线程安全的Map。但是需要注意,虽然这个方法可以保证基本的线程安全,但迭代仍然是非线程...

    JNI处理hashmap,string等对象的操作

    在这个主题中,我们将深入探讨如何使用JNI处理HashMap、String等对象。 首先,让我们来理解JNI的基本结构。JNI接口提供了大量的函数,让本地方法(C/C++代码)能够创建、访问和修改Java对象。要使用JNI,你需要定义...

    HASHMAP缓存.txt

    - **并发控制**:在多线程环境中,必须正确处理锁的使用,避免死锁或活锁的发生。 综上所述,《HASHMAP缓存.txt》文档不仅介绍了HashMap作为缓存的基本概念和实现方式,还涉及到了单例模式、线程安全、性能优化等...

    Java-HashMap.rar_hashmap_java hashmap

    1. **非同步**:`HashMap`不是线程安全的,因此在多线程环境下不建议直接使用,可以考虑使用`Collections.synchronizedMap()`方法将其包装为同步的,或者使用`ConcurrentHashMap`。 2. **无序性**:`HashMap`中的...

    易语言HashMap类

    易语言HashMap类是一种在...这些知识点涵盖了易语言HashMap类的基本操作和工作原理,理解和熟练运用这些概念对于高效地使用HashMap类至关重要。通过深入学习和实践,开发者可以更好地利用HashMap类解决实际编程问题。

    hashmap 集合

    如果两个键的哈希码相同,HashMap会使用equals()方法来区分它们,这就是所谓的哈希碰撞。为了优化性能,HashMap通常会动态调整其容量,以保持较低的装载因子(load factor),通常是0.75,以减少冲突。 在实际项目...

    深入arraylist,linkedlist,hashmap,hashset源码(2012/3/18)

    为了解决这个问题,Java提供了`Collections.synchronizedMap()`方法将HashMap包装成线程安全的版本,或者可以使用ConcurrentHashMap,它是专门为多线程环境设计的,提供了更高的并发性能。 总结来说,深入理解...

    ArrayList,HashMap

    3. 避免键冲突:在HashMap中,确保键对象正确重写了`hashCode()`和`equals()`方法,以确保键的唯一性和散列计算的准确性。 此外,ArrayList和HashMap在并发环境下需要特别注意。如果不进行同步控制,多线程环境下...

    马士兵老师HashMap学习笔记

    ConcurrentHashMap是线程安全的HashMap实现,它使用分段锁(Segment)来提高并发性能。在put过程中,首先根据键的哈希值确定所在的段,然后在该段上加锁,执行put操作。这样可以避免全局锁,提升并发效率。每个段...

    treemap treeset hashset hashmap 简要介绍

    对于`HashMap`,尽管`Student`类的`equals()`和`hashCode()`方法未正确实现,但是由于`HashMap`使用的是对象引用作为键,所以每个调用`put()`方法都会覆盖之前的值,最终`map`中只会有最后一个键值对。 综上所述,...

    hashtable和hashmap的区别

    ### Hashtable和HashMap的区别 ...总之,了解`Hashtable`和`HashMap`之间的差异对于正确选择合适的数据结构至关重要。通过权衡线程安全性和性能需求,可以更有效地利用这些数据结构来解决实际问题。

    delphi hashmap集合

    - **插入元素:** 使用`.Add`或`.Insert`方法添加键值对,如 `HashMap.Add('Key1', 1);` - **访问元素:** 通过键来获取值,如 `var Value: Integer = HashMap['Key1'];` - **删除元素:** 使用`.Remove`方法删除...

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

    插入HashMap的对象必须正确实现`equals()`和`hashCode()`方法,以确保键的比较和哈希计算符合预期。这两个方法的实现对于HashMap的正确性和效率至关重要。 8. **常用方法** - `put(K key, V value)`: 插入键值对...

Global site tag (gtag.js) - Google Analytics