gpt4 book ai didi

java - HashMap 的两个实例与 HashMap 的实例之间的区别,其中 Object 包含两个字符串

转载 作者:行者123 更新时间:2023-11-30 05:51:17 24 4
gpt4 key购买 nike

为简单起见,假设我有两个 HashMap<String, String> 实例他们共享相同的 key 。我想知道的是,这与代表这两个 String 之间存在性能和内存差异Object 中的值并将它们存储在 HashMap<String, Object> 中.

我的实际问题使用了 HashMap<String, HashSet<String>> 的一个实例和 HashMap<String, Double> 的两个实例我希望通过合并它们,我能以某种方式节省内存,但我不确定使用自定义 Object 是否会对性能产生影响与像 HashSet 这样的本地对象或 Double作为值(value)观。

最佳答案

哈希值是根据字符串计算的,因此不会影响速度。从长远来看,空间影响(非常轻微的增加)可以忽略不计。如果它能让代码更清晰,那就去做吧,然后搞砸性能(只要我们不是在谈论巨大的性能瓶颈,就没关系)。

速度

对于速度影响,请记住在 HashMap<String, ?> 中, String是什么被散列。实际上,您可能会发现速度略有提高,因为与 3 次查找相比,您只需执行一次查找即可找到您的自定义对象。

空间

对于空间影响,请记住 HashMap使用大小为 2 的幂的内部数组。如果您只使用 Vanilla HashMap如果没有像自定义加载因子这样的特殊设置,那么您可能会看到空间略有增加,因为现在您有(当然,这只是简化的粗略):

HashSet<String>[]
Double[]
Double[]

合并之后,你会得到

CustomObject[]
HashSet<String>
Double
Double

这忽略了不随 map 增长的恒定大小信息。对象占用的空间比仅对其字段的引用多,但不是很多。

易读性

自定义对象选项无疑赢得了这一胜利。它更简洁,非常面向对象,非常非常适合 Java。无论性能如何,您都应该这样做。从长远来看,它看起来会更好并且更易于维护。

例如,如果您想向自定义对象添加字段,那很容易。但是拥有单独的映射意味着为更多变量创建更多映射,这是很脏的。我说采用 OOP 方式。

关于java - HashMap<String, String> 的两个实例与 HashMap<String,Object> 的实例之间的区别,其中 Object 包含两个字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12940344/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com