为什么取不到return的hashmap

问题描述

我定义了一个可以重复KEY的hashmapMap<Number,List<Participant>> map = new IdentityHashMap<Number,List<Participant>>();这样将值传进去map.put(Number,List<Participant>)在System.out.println("map: "+ map.toString());的时候,可以查看到取到了值map: {2=[Henk De Bever, Michael Jackson]},map: {2=[Kim Rekels, Michael Jackson]}. 问题是 RETURN MAP的时候,为什么取不到值了?测试的时候,也是如下一样的结果:Result: <{2=[]}>如何取到一个MAP,并弄成这样{2=[Henk De Bever, Michael Jackson],[Kim Rekels, Michael Jackson]}第一次发帖,分不多,诚心QZ,谢谢了 问题补充:ymmihw 写道

解决方案

IdentityHashMap判断key值时使用的是引用相等性。即当且仅当 (k1 == k2) 时,才认为两个键 k1 和 k2 相等。但是这个问题应该不是楼主遇到问题的答案,应该是在你return map之前更改了List<Participant>最终指向的内存区域中数据(被清空了),导致你再次迭代数据的时候value值都为null.
解决方案二:
可能是某些代码修改了List<Participant>,清空了这个列表导致的
解决方案三:
IdentityHashMap不允许重复键,但是问题应该不在这吧

时间: 2024-09-20 05:47:38

为什么取不到return的hashmap的相关文章

Java集合源码剖析:HashMap源码剖析

HashMap简介 HashMap是基于哈希表实现的,每一个元素是一个key-value对,其内部通过单链表解决冲突问题,容量不足(超过了阀值)时,同样会自动增长. HashMap是非线程安全的,只是用于单线程环境下,多线程环境下可以采用concurrent并发包下的concurrentHashMap. HashMap 实现了Serializable接口,因此它支持序列化,实现了Cloneable接口,能被克隆. HashMap源码剖析 HashMap的源码如下(加入了比较详细的注释): pac

从代码层读懂Java HashMap的实现原理

概述 Hashmap继承于AbstractMap,实现了Map.Cloneable.Java.io.Serializable接口.它的key.value都可以为null,映射不是有序的.Hashmap不是同步的,如果想要线程安全的HashMap,可以通过Collections类的静态方法synchronizedMap获得线程安全的HashMap. Map map = Collections.synchronizedMap(new HashMap()); HashMap 中两个重要的参数:"初始容

Hashmap的实现

HashMap的数据结构 数据结构中有数组和链表来实现对数据的存储,但这两者基本上是两个极端. 在java编程语言中,最基本的结构就是两种,一个是数组,另外一个是模拟指针(引用),所有的数据结构都可以用这两个基本结构来构造的,HashMap也不例外.HashMap实际上是一个"链表的数组"的数据结构,每个元素存放链表头结点的数组,即数组和链表的结合体. 数组 数组存储区间是连续的,占用内存严重,故空间复杂的很大.但数组的二分查找时间复杂度小,为O(1):数组的特点是:寻址容易,插入和删

[Java] HashMap源码分析

版权声明:请尊重个人劳动成果,转载注明出处,谢谢!http://blog.csdn.net/amazing7/article/details/51283211 目录(?)[+] 1.概述 Hashmap继承于AbstractMap,实现了Map.Cloneable.Java.io.Serializable接口.它的key.value都可以为null,映射不是有序的.    Hashmap不是同步的,如果想要线程安全的HashMap,可以通过Collections类的静态方法synchronize

浅谈 Java HashMap 的那点事

Java集合类的整体架构 比较重要的集合类图如下: 有序否 允许元素重复否 Collection 否 是 List 是 是 Set AbstractSet 否 否 HashSet TreeSet 是(用二叉树排序) Map AbstractMap 否 使用 key-value 来映射和存储数据, Key 必须惟一, value 可以重复 HashMap TreeMap 是(用二叉树排序) HashMap详解 HashMap 和 HashSet 是 Java Collection Framewor

从代码层读懂HashMap的实现原理

概述 Hashmap继承于AbstractMap,实现了Map.Cloneable.java.io.Serializable接口.它的key.value都可以为null,映射不是有序的. Hashmap不是同步的,如果想要线程安全的HashMap,可以通过Collections类的静态方法synchronizedMap获得线程安全的HashMap. Map map = Collections.synchronizedMap(new HashMap()); HashMap 中两个重要的参数:"初始

java-基础-hashmap剖析

hashmap概述 HashMap是基于哈希表的Map接口的非同步实现.此实现提供所有可选的映射操作,并允许使用null值和null键.此类不保证映射HashMap实际上是一个"链表散列"的数据结构,即数组和链表的结合体.的顺序,特别是它不保证该顺序恒久不变.HashMap底层就是一个数组结构,数组中的每一项又是一个链表.当新建一个HashMap的时候,就会初始化一个数组. /** * The table, resized as necessary. Length MUST Alway

java.util.HashMap源码要点浅析

1.散列表要解决的一个问题就是散列值的冲突问题,通常是两种方法:链表法和开放地址法.链表法就是将相同hash值的对象组织成一个链表放在hash值对应的槽位:开放地址法是通过一个探测算法,当某个槽位已经被占据的情况下继续查找下一个可以使用的槽位.java.util.HashMap采用的链表法的方式,链表是单向链表,因此在删除过程中要自己维持prev节点,我想不采用双向链表是从节省空间考虑.一个典型的查找过程: for (Entry<K,V> e = table[indexFor(hash, ta

java提高篇(二三)-----HashMap详解_java

HashMap也是我们使用非常多的Collection,它是基于哈希表的 Map 接口的实现,以key-value的形式存在.在HashMap中,key-value总是会当做一个整体来处理,系统会根据hash算法来来计算key-value的存储位置,我们总是可以通过key快速地存.取value.下面就来分析HashMap的存取. 一.定义 HashMap实现了Map接口,继承AbstractMap.其中Map接口定义了键映射到值的规则,而AbstractMap类提供 Map 接口的骨干实现,以最