我们使用的HashMap<Integer, SomeType>()
条目超过一百万。我认为这很大。
但是整数是他们自己的哈希码。我们不能用一个使用特殊IntegerHashMap<Integer, SomeType>()
的{{1}}来保存内存,直接使用int而不是指向Map.Entry
对象的指针?在我们的例子中,这将节省1000000x Integer
对象所需的内存。
我的思路有任何缺陷吗?对于普遍感兴趣太特别了? (至少有一个Integer
)
ADD1。 EnumHashMap
的第一个通用参数用于使其与其他IntegerHashMap
实现非常相似。当然可以放弃它。
ADD2。其他地图和集合也应该如此。例如Map
,ToIntegerHashMap<KeyType, Integer>
等
答案 0 :(得分:2)
您正在寻找的是&#34; Primitive集合&#34;图书馆。它们通常在内存使用和性能方面要好得多。最古老/最受欢迎的图书馆之一被称为&#34; Trove&#34;。但是,它现在有点过时了。现在使用的主要活动库是:
答案 1 :(得分:1)
有些提醒:
“整数是他们自己的哈希码”我对这个陈述非常谨慎。根据你的整数,键的分布可能是从最优到可怕的任何东西。理想情况下,我会设计地图,以便您可以将自定义IntFunction
作为散列策略传递。如果需要,您仍然可以将其默认为(i) -> i
,但是您可能想要引入模数因子,或者您的内部数组将是巨大的。您甚至可能想要使用IntBinaryOperator
,其中一个参数是int,另一个是存储桶的数量。
我会放弃第一个通用参数。您可能不希望实现Map<Integer, SomeType>
,因为您必须在所有方法中使用box / unbox,否则将丢失所有优化(空格除外)。试图使原始集合与对象集合兼容将使整个练习变得毫无意义。