问题内容: 正如许多人所指出的,并发使用时可能会遇到无限执行循环(请参阅GRIZZLY-1207,JGRP-525,可能是HHH-6414,以及此SO 答案)。 明确记录为不是线程安全的。显然,正确的解决方法是使用一个线程安全的实现,尤其如此。我对引起无限循环的并发计时感到好奇。我最近在Java 7 JRE上遇到了这个循环,想了解确切的原因。例如,这是由多个看跌期权同时引起的吗? 在HashMap
问题内容: 我通过执行以下功能将传入的字符串转换为哈希码,但其中一些值为负数。我不认为哈希值应该为负。请告诉我我在做什么错。 问题答案: 我不认为哈希值应该为负。 为什么不?具有负哈希码是完全有效的。提出哈希码的大多数方法自然都以负值结尾,处理它们的任何事情都应考虑到这一点。但是,我会考虑采用另一种方法来计算您的哈希码,例如 目前尚不清楚这些表达式的类型是什么,但是我猜想您最终将要使用字符串的哈希
问题内容: 我在Java中有一个Hashtable,想要迭代表中的所有值,并在迭代时删除特定的键值对。 怎么做? 问题答案: 您需要使用一个明确的遍历的条目集,而不是能够通过使用现有的增强的for循环语法的Java 6.下列示例循环的,对,去除其任何进入关键是空还是equals 0。
问题内容: 在Java中,并作为收藏。但是我不知道在什么情况下应该使用什么时间。两者之间的主要区别是什么? 问题答案: 您正在专门询问ArrayList和HashMap,但我认为要完全了解发生了什么,您必须了解Collections框架。因此,ArrayList实现List接口,而HashMap实现Map接口。因此,真正的问题是您何时要使用列表以及何时要使用地图。这是Java API文档有很大帮助
问题内容: 我应该传递什么值来为N个项目创建有效的/ 基于结构的结构? 在中,有效数字为N(N已假定未来增长)。a的参数应该是什么?((int)(N * 0.75d),0.75d)?更多?减?更改负载系数有什么影响? 问题答案: 关于负载因子,我将简单引用HashMap javadoc : 通常,默认负载因子(.75)在时间和空间成本之间提供了很好的折衷。较高的值会减少空间开销,但会增加查找成本(
问题内容: 我正在研究Java 8功能,发现当存储桶上的条目集数量增加时,哈希图使用红黑树而不是链表。 但是,这是否不要求密钥具有可比性,或者是否要求密钥存在某种顺序,这是如何工作的?这种转换何时真正发生?如何发生? 问题答案: 当单个存储桶 中至少有 8个条目()并且存储桶总数 大于_64()时,该单个存储桶将被转换为 _完全平衡的红黑树节点 。 删除条目(== 6)时,还应该注意收缩(如果需要
问题内容: and方法必须一致,这意味着当两个对象根据方法相等时,它们的方法应返回相同的哈希值。 如果我们不重写hashCode()方法,则Java将返回唯一的哈希码。 为什么取消注释该行会导致编译错误? 如果对象的哈希码不相等,即使默认哈希码有所不同,为什么它们显示为相等? 问题答案: 平等仅由方法equals()确定。并且hashCode()方法可用于其他情况,例如Map或Set。实际调用eq
问题内容: 是否可以在迭代过程中更改同一HashMap实例的键?因为地图条目集没有方法entry.setKey()。现在我能想到的是创建另一个HashMap … 问题答案: 您应该将信息保留在其他集合中,以便在迭代后对其进行修改。您只能在迭代器期间使用删除条目。合同禁止在迭代过程中对其进行更改。
问题内容: 对于可以存储在HashMap中的键条目的数量有理论上的限制吗?或者最大数目纯粹取决于可用的堆内存吗? 另外,哪种数据结构最适合存储大量对象(例如数十万个对象)? 问题答案: 可存储在HashMap中的键条目的数量是否有理论上的限制,还是仅取决于可用的堆内存? 查看该类的文档,我会说理论极限是(2 31 -1 = 2147483647)个元素。 这是因为要正确实现此类,该方法必须返回一个
问题内容: 什么问题/陷阱,必须重写时,必须考虑和? 问题答案: 理论(针对语言律师和数学倾向者): 必须定义一个等价关系(它必须是自反的,对称的和可传递的)。另外,它必须是一致的(如果未修改对象,则它必须保持返回相同的值)。此外,必须始终返回。 也必须是一致的(如果未根据修改对象equals(),则它必须保持返回相同的值)。 该关系的两种方法之间是: 每当a.equals(b),则a.hashC
问题内容: 我需要制作一个副本,`HashMap<Integer, List List List `原件中。 如果我正确理解,这两种方法只会创建浅拷贝,这不是我想要的: 我对吗? 除了遍历所有键和所有列表项并手动复制之外,还有更好的方法吗? 问题答案: 没错,浅表副本不能满足您的要求。它将具有原始地图中的副本,但这些副本将引用相同的对象,因此对from 的修改将出现在from的对应内容中。 在Ja
问题内容: 有没有一种方法可以在Java中随机获取HashMap的值? 问题答案: 这有效: 如果您希望随机值不是类型,只需在最后一行添加强制类型转换即可。因此,如果声明为: 最后一行可以是: 下面的代码 无效 ,总是返回s 数组,不能将其强制转换为。
问题内容: 使用Java的hashcode函数是否可能对不同的字符串使用相同的hashcode?或者如果可能的话,其可能性的百分比是多少? 问题答案: Java哈希码是32位。它散列的可能字符串的数量是无限的。 所以是的,会有碰撞。百分比是没有意义的-存在无限数量的项目(字符串)和有限数量的可能的哈希。
问题内容: 我有一个Hashmap,出于速度原因,我不想锁定。假设我不介意过时的数据,那么更新并同时访问它会引起任何问题吗? 我的访问是获取,而不是遍历访问,而删除是更新的一部分。 问题答案: 同步或使用ConcurrentHashMap的重要性不可低估。 直到几年前,我还处于一种误导的印象中,我只能通过同步HashMap上的放置和删除操作就可以摆脱困境。这当然是非常危险的,实际上会在某些(我认为
问题内容: 我想知道与ArrayList相比,Java HashMap的内存开销是多少? 更新: 我想提高搜索相同对象的大包装(600万以上)的特定值的速度。 因此,我正在考虑使用一个或多个HashMap而不是使用ArrayList。但是我想知道HashMap的开销是多少。 据我了解,密钥不是存储的,只是密钥的哈希,因此它应该类似于 对象的哈希大小+一个指针 。 但是使用什么哈希函数?是对象提供的