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

HashMap hashCode奇怪的实现

    博客分类:
  • java
 
阅读更多

无意看群里有人讨论HashMap,new出来的HashMap实例hashCode都是一样的。而且循环放入键值也还是一样,都是0.细看HashMap hashCode的实现,也就是它的父类AbstractMap的代码 :

public int hashCode() {
	int h = 0;
	Iterator<Entry<K,V>> i = entrySet().iterator();
	while (i.hasNext())
	    h += i.next().hashCode();
	return h;
}

 

 继续看Entry的hashCode:

public final int hashCode() {
            return (key==null   ? 0 : key.hashCode()) ^
                   (value==null ? 0 : value.hashCode());
}

 

 

由此就不难看出,当一个HashMap实例中,所存储的所有元素key value 对 的hashcode都相同时,那么这个HashMap的hashCode将恒为0,这不知道算不算得上一个bug.

 

测试代码 

 

Map<String,String> map;
		for(int i=0;i<3;i++){
			map=new HashMap<String,String>();
			map.put(i+"", i+"");
			System.out.println(map.hashCode());
		}
		System.out.println("===========");
		for(int i=0;i<3;i++){
			map=new HashMap<String,String>();
			map.put(i+"", i+i+"");
			System.out.println(map.hashCode());
		}
 









 

分享到:
评论

相关推荐

    hashmap的C++实现

    hashmap的C++实现,对于学习C++方面的很有用

    hashmap实现原理

    在深入探讨HashMap的实现原理之前,我们需要了解两个关键的接口方法:`hashCode()`和`equals()`。 根据《Effective JAVA》的建议,当重写`equals()`方法时,也应重写`hashCode()`方法。这是因为在HashMap中,`...

    asp hashmap,arraylist实现

    标题中的“asp hashmap,arraylist实现”指的是在ASP(Active Server Pages)编程中使用HashMap和ArrayList这两种数据结构的具体应用。HashMap和ArrayList是.NET框架中常用的数据集合类,它们在处理和组织数据方面各...

    C语言实现hashMap

    C语言实现hashMap,包含创建hashMap、插入hashMap、查找hashMap、删除hashMap,已经若干经典的hash函数。文章链接:https://blog.csdn.net/sxf1061700625/article/details/109594495

    Java中用hashmap实现购物车

    Java语言使用hashmap实现向购物车添加删除修改商品,显示商品信息

    深入Java集合学习系列:HashMap的实现原理

    在使用HashMap时,需要注意几个关键点:1) 键必须正确实现hashCode()和equals()方法,以确保哈希计算和比较的一致性;2) 避免使用null键和null值,因为HashMap的null键和null值有特殊含义;3) 考虑负载因子和初始...

    源码解析jdk8.0集合:HashMap的底层实现原理.pdf

    根据提供的文件信息,以下是对JDK 8.0中HashMap实现原理的详细知识点介绍: 1. HashMap概述 HashMap是Java集合框架的一部分,它实现了Map接口,用于存储键值对。其核心特点在于基于哈希表的映射机制,能够通过键...

    hashmap面试题_hashmap_

    答:通过良好的键的hashCode()实现减少哈希冲突,以及使用链表/红黑树处理哈希冲突。 4. HashMap与Hashtable的区别? 答:HashMap非线程安全,而Hashtable是线程安全的;HashMap允许null键值,Hashtable不允;...

    Java HashMap类详解

    本资源详细介绍了 Java 中的 HashMap 类,包括其实现机制、Hash 存储机制、集合存储机制等方面的知识点。 1. HashMap 和 HashSet 的关系 HashMap 和 HashSet 是 Java Collection Framework 的两个重要成员,虽然...

    HashMap的实现原理

    ### HashMap的实现原理 #### 1. HashMap概述 HashMap 是 Java 集合框架中一个非常重要的类,它实现了 Map 接口,并提供了基于哈希表的存储方式。与其它 Map 实现不同的是,HashMap 允许使用 `null` 键和 `null` 值...

    源码解析jdk7.0集合(3):HashMap的底层实现原理.pdf

    - **键的equals和hashCode方法**:由于HashMap是根据键的hashCode来计算索引的,因此键对象需要合理重写equals和hashCode方法,保证哈希的一致性和准确性。 #### 七、结语 通过深入解析HashMap在JDK 7.0中的底层...

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

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

    HashCode的用法详解

    hashCode 的实现 在 Java 中,hashCode 是 Object 类中的一个方法,默认情况下,该方法会将对象的内部地址转换成一个整数。然而,在实际应用中,我们需要重新定义 hashCode 方法,以便满足我们的需求。 例如,我们...

    深入 HashCode 方法~

    - 一个常见的实现方式是结合类中的关键属性来计算 `HashCode`,例如:`return Attribute1.hashCode() + Attribute2.hashCode();` 其中 `Attribute1` 和 `Attribute2` 是类的关键属性。 3. **HashCode 的设计原则**...

    基于JavaScript的HashMap实现

    JavaScript本身并不直接支持HashMap,但我们可以利用对象(Object)的特性来模拟HashMap的实现。这篇博客“基于JavaScript的HashMap实现”可能详细阐述了如何通过自定义函数来创建一个高效且灵活的HashMap数据结构。...

    java HashMap原理分析

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

    自定义map实现java的hashmap

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

    js 实现HashMap功能

    用js代码实现java中hashmap 的所有功能

Global site tag (gtag.js) - Google Analytics