提高内存使用率:IntegerHashMap

时间:2017-03-27 13:00:03

标签: java dictionary

我们使用的HashMap<Integer, SomeType>()条目超过一百万。我认为这很大。

但是整数是他们自己的哈希码。我们不能用一个使用特殊IntegerHashMap<Integer, SomeType>()的{​​{1}}来保存内存,直接使用int而不是指向Map.Entry对象的指针?在我们的例子中,这将节省1000000x Integer对象所需的内存。

我的思路有任何缺陷吗?对于普遍感兴趣太特别了? (至少有一个Integer

ADD1。 EnumHashMap的第一个通用参数用于使其与其他IntegerHashMap实现非常相似。当然可以放弃它。

ADD2。其他地图和集合也应该如此。例如MapToIntegerHashMap<KeyType, Integer>

2 个答案:

答案 0 :(得分:2)

您正在寻找的是&#34; Primitive集合&#34;图书馆。它们通常在内存使用和性能方面要好得多。最古老/最受欢迎的图书馆之一被称为&#34; Trove&#34;。但是,它现在有点过时了。现在使用的主要活动库是:

See Benchmarks Here

答案 1 :(得分:1)

有些提醒:

  1. “整数是他们自己的哈希码”我对这个陈述非常谨慎。根据你的整数,键的分布可能是从最优到可怕的任何东西。理想情况下,我会设计地图,以便您可以将自定义IntFunction作为散列策略传递。如果需要,您仍然可以将其默认为(i) -> i,但是您可能想要引入模数因子,或者您的内部数组将是巨大的。您甚至可能想要使用IntBinaryOperator,其中一个参数是int,另一个是存储桶的数量。

  2. 我会放弃第一个通用参数。您可能不希望实现Map<Integer, SomeType>,因为您必须在所有方法中使用box / unbox,否则将丢失所有优化(空格除外)。试图使原始集合与对象集合兼容将使整个练习变得毫无意义。