为简单起见,假设我有两个实例HashMap<String, String>,它们共享相同的密钥.我想知道的是,它之间存在性能和内存差异,并且表示这两个String值Object并将其存储在中HashMap<String, Object>.
我的实际问题是使用一个实例HashMap<String, HashSet<String>>和两个实例,HashMap<String, Double>我希望通过合并它们,我会以某种方式节省内存,但我不确定使用自定义Object与本机对象是否会对性能产生影响喜欢HashSet或Double作为价值观.
哈希值是根据字符串计算出来的,因此不会产生速度影响.从长远来看,空间影响(非常轻微的增加)可以忽略不计.如果它使代码更清晰,那么就去做并搞砸性能(只要我们不谈论巨大的性能瓶颈,就没关系).
速度
对于速度影响,请记住,在a中HashMap<String, ?>,String是什么被哈希.实际上,您可能会看到速度略有增加,因为与3次查找相比,您只需要执行一次查找来查找自定义对象.
空间
对于空间影响,请记住HashMap使用内部数组,其大小为2的幂.如果您只HashMap使用没有特殊设置(如自定义加载因子)的香草,那么您可能会看到空间略有增加,因为现在您已经拥有(大致当然,这只是简化):
HashSet<String>[]
Double[]
Double[]
Run Code Online (Sandbox Code Playgroud)
结合后,你就可以了
CustomObject[]
HashSet<String>
Double
Double
Run Code Online (Sandbox Code Playgroud)
这忽略了不随地图增长的恒定大小信息.对象占用的空间不仅仅是对其字段的引用,而且不是很多.
易读性
自定义对象选项赢得了这一点.它更干净,非常OOP,非常适合Java.无论性能如何,无论如何都应该这样做.从长远来看,它看起来会更好,并且更易于维护.
例如,如果要向自定义对象添加字段,那很容易.但是拥有单独的地图意味着为更多变量创建更多地图,这是很脏的.我说去OOP方式.
| 归档时间: |
|
| 查看次数: |
618 次 |
| 最近记录: |