Java开发

为什么 HashMap 调整大小以防发生碰撞或最坏的情况

我只针对 1.7 之前的 java 版本提出这个问题.我正在使用反射来找出 HashMap 的当前容量.在下面的程序中,将 12 个唯一的人放入一个 HashMap 桶中(使用相同的哈希码).然后我将第 13 个独特的人放在相同或不同的存储桶上(使用相同或不同的哈希码).在这两种情况下,添加第 13 个元素后,HashMap 都将大小调整为 32 个桶.我知道由于负载因子 0.75 和初始容量 1 ..
发布时间:2022-01-08 14:34:49 Java开发

<<= 运算符在 Java 中是什么意思?

您能否解释一下来自 HashMap 构造函数 特别是这一行 容量= initialCapacity198 整数容量 = 1;199 而(容量 解决方案 相当于capacity = capacity . 该操作将容量的位向左移动一位,相当于乘以 2. 您发布的特定代码找到大于 initialCapacity 的 2 的最小幂. 所以如果 ..
发布时间:2022-01-08 14:34:28 Java开发

为什么要在 HashMap 中使用哈希方法

hash 方法状态的Java doc, 检索对象散列码并将补充散列函数应用于结果散列,以防止劣质散列函数.这很关键,因为 HashMap 使用长度为二的幂的哈希表,否则会遇到低位没有差异的 hashCode 的冲突. 我无法理解的是, 1) 为什么 HashMap 使用长度为二的幂的哈希表? 在声明表时也有说明: /*** 表格,根据需要调整大小.长度必须始终是 2 的幂 ..
发布时间:2022-01-08 14:34:21 Java开发

如何清除要被垃圾收集的对象(HashMap) - Java

所以我在这里拥有的是一个 java 程序,它处理大量数据并将其存储到对象中(主要是哈希映射).在运行时间的某个时间点,数据变得无用,我需要丢弃,以便释放一些内存. 我的问题是丢弃这些数据以进行垃圾收集的最佳行为是什么? 我已经尝试了 map.clear(),但是这不足以清除地图分配的内存. 编辑(添加我尝试过的替代方案) 我也尝试过 system.gc() 来强制垃圾收集器 ..
发布时间:2022-01-08 14:34:12 Java开发

为什么HashMap的初始容量是16(2的幂)和Hashtable的初始容量是11(素数)?

如果您知道,请描述原因.我用谷歌搜索了它,但没有找到解释清楚的答案. 当您的 hashCode 为负数时,是否使存储桶的索引为正数? 解决方案 对于HashMap,存储Map的条目的数组中的索引是这样计算的(其中h 由 key 的 hashCode 计算得出): static int indexFor(int h, int length) {返回 h &(长度-1);} 其中 l ..
发布时间:2022-01-08 14:33:47 Java开发

杰克逊:地图的反序列化

我正在使用 Jackson 反序列化一个 json 文件(我用 jackson 序列化了该文件).json 是一个简单的 HashMap,但是当我尝试反序列化时映射器会抱怨. org.codehaus.jackson.map.JsonMappingException:无法从 START_ARRAY 令牌中反序列化 java.util.HashMap 的实例 我的序列化 HashMap 字符串. ..
发布时间:2022-01-08 14:33:31 Java开发

将 HashMap 存储在另一个 HashMap 中并提高性能

我应该在另一个 HashMap 中创建一个 HashMap 如下所示,它可以根据键将值存储在内部 HashMap 中运行时外层HashMap 即程序所需的输出应该是格式 { 1 = {11 = "aaa",15 = "bbb"}, 2 = {13 = "ccc", 14 = "ddd"} } 其中 1,2 是 Outer HashMap 的键值. 下面是为其提供的代码有没有更好的 ..
发布时间:2022-01-08 14:33:25 Java开发

在单个后台线程定期修改它的同时读取 Map

我有一个类,我在 updateLiveSockets() 方法内每 30 秒从单个后台线程填充地图 liveSocketsByDatacenter ,然后我有一个方法 getNextSocket() 将被多个读取器线程调用以获取可用的活动套接字,该套接字使用相同的映射来获取此信息. 公共类 SocketManager {私有静态最终随机随机=新随机();private final Schedul ..
发布时间:2022-01-08 14:32:58 Java开发

更新 Java HashMap 键

我只是想知道,如果 HashMap 的键是可变的会发生什么,下面的测试程序证明了这一点,我无法理解 equals 和 hashCode 方法何时返回true 和相同的值,为什么 hashmap.containsKey 返回 false. 公共类 MutableKeyHashMap {公共静态无效主要(字符串[]a){HashMapmap = new HashMap ..
发布时间:2022-01-08 14:32:49 Java开发

需要一个对一个值具有多个键的 Java 映射/表.值通常会改变

我需要的是一个允许多个键访问单个对象的集合. 我需要对此对象进行频繁的更改. 它还必须对 500k+ 个条目有效. 解决方案 java.util.Map 的任何实现都可以做到这一点 - 没有限制 在单独的键下可以添加特定值多少次: Mapm = new HashMap();m.put("你好", 5);m.put("世界", 5);System.out.printl ..
发布时间:2022-01-08 14:32:39 Java开发

当对象 Hashcode 更改时,Hashmap 或 Hashset 中的查找会发生什么

在 Hashmap 中,提供的键的哈希码用于将值放置在哈希表中.在哈希集中,对象哈希码用于将值放置在底层哈希表中.也就是说,hashmap 的优点是你可以灵活地决定你想要什么作为 key,这样你就可以做这样的好事. 地图玩家 = 新的 HashMap(); 这可以将诸如玩家姓名之类的字符串映射到玩家本身. 我的问题是,当键的 Hashcode 发生变化时,查找会发生什么变化. 我希 ..
发布时间:2022-01-08 14:32:25 Java开发

创建 HashMap 的不同方法

我最近一直在学习 HashMaps,但我有一个问题似乎无法得到明确的答案.主要区别 - HashMap hash1 = new HashMap(); 对比 HashMap 我认为当您定义 HashMap 时,它需要键和值.任何帮助将非常感激.谢谢. 解决方案 这些是你的选择: J2SE Map map = new HashMap(); J2SE 5.0+ 风格(使用泛型 ..
发布时间:2022-01-08 14:32:08 Java开发

在 Java Map 中查找重复值?

我想在 HashMap 中显示值.HashMap 可能有重复的值(但不是重复的键),但我只想显示一次值. 所以我应该找出 Map 是否有重复值.我知道我们可以遍历 Map 并使用 map.containsValue(value) 的返回布尔值.我想知道是否存在任何方法来查找地图中的重复值,或者我们应该自己编写代码? 解决方案 一个简单的解决方案是将值列表的大小与值集进行比较. // ..
发布时间:2022-01-08 14:31:20 Java开发

多地图空间问题:番石榴

在我的 Java 代码中,我使用 Guava 的 Multimap (com.google.common.collect.Multimap) 使用这个: Multimap索引 = HashMultimap.create() 这里,Multimap 键是 URL 的一部分,值是 URL 的另一部分(转换为整数).现在,我分配我的 JVM 2560 Mb (2.5 GB) 堆空间(通过使用 Xm ..
发布时间:2022-01-08 14:31:13 Java开发

如何合并多个hashmaps还对java中相同键的值求和

我正在尝试合并多个哈希图也对相同键的值求和,我想用玩具示例解释我的问题如下 HashMapm = new HashMap();HashMapm2 = new HashMap();m.put("苹果", 2);m.put("梨", 3);m2.put("苹果", 9);m2.put("香蕉", 6); 我试过putall m.putAll(m2); 输出如下{香蕉=6,苹果=9 ..
发布时间:2022-01-08 14:30:51 Java开发

反序列化后哈希图变慢 - 为什么?

我有一个相当大的 Hashmap (~250MB).创建它大约需要 50-55 秒,所以我决定将它序列化并保存到一个文件中.现在从文件中读取大约需要 16-17 秒. 唯一的问题是这种方式的查找速度似乎较慢.我一直以为hashmap是从文件中读入内存的,所以性能应该和我自己创建hashmap的情况是一样的吧?这是我用来将哈希图读入文件的代码: 文件 file = new File("oma ..
发布时间:2022-01-08 14:30:27 Java开发

ConcurrentHashMap的Segment和HashMap的bucket在理论上有什么区别?

我了解在HashMap中,条目(Key,Value)是根据hash(Key.hashCode)放在桶中的-->表示桶位置的索引.如果条目已经放置在该位置,则会创建一个链表,并且新条目(如果它具有不同的键 --> 通过 equals() 方法)放置在链表的开头. 我能否将这个概念与 ConcurrentHashMap 的概念相关联,但不是 Buckets,而是有各个线程在其上具有锁的 Segm ..
发布时间:2022-01-08 14:30:21 Java开发

如何通过 JNI 将 HashMap 从 Java 发送到 C

我有一个 Object 有一个 HashMap 字段.当 Object 传递给 C 时,如何访问该字段? Object的Class有以下字段: 私有字符串你好;私有映射params = new HashMap(); 解决方案 你的问题的答案真的归结为为什么你想将 Map 传递给C 而不是在 Java 中迭代您的 Map 并将内容传递给 ..
发布时间:2022-01-08 14:30:14 Java开发