java - 如何使用 map 节省空间

标签 java memory dictionary

我必须在 map 中存储大量数据,总大小非常重要。 map 的数量很多,每个 map 的大小很小(大多数 map <10 个映射)并且 map 在创建后不会改变。

我看到两种方式(假设我知道将存储 n 个映射):

  1. 使用初始大小为 n 和加载因子为 1 的 HashMap
  2. 使用大小为 nArrayList,存储 (Key, Value) 对。像使用 Map 一样实现 get() 方法

有没有更好的方法(也许是 Guava ImmutableMap)?

最佳答案

参见 Perfect hash function

对于不再添加键的映射,可以使用优化的哈希函数:一个尽可能小的数组,以及影响最小的冲突。

除了学术论文之外,还可以从 n 个不同的较小函数/值实体构建哈希函数,并且可以通过尝试对数据集进行组合来找到最优值。并且具有不同的数组大小。

由于这个领域太宽泛(如重新散列),请进一步搜索或自己动手。


如果您获得了许多值,则采用相同的对象实例,而不是拥有许多相同的不同对象。这是通过身份映射 Map<T, T> 完成的仅使用第一个放置键。


  • TreeMap 适用于与 LinkedList w.r.t. 一样低效的大数据。数组列表。
  • HashMap 的实现对于效率来说非常有趣。最后一个人可以做同样的事 ArrayList.trimToSize()尽管可能无关紧要。

关于java - 如何使用 map 节省空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29818487/

相关文章:

C++映射线程同步

java - 将物体从墙上弹起

java - 尝试在指定时间后更改 Activity 后出错 - "Unfortunately, Application has stopped"

java - Java 中的循环引用

c - gdb 观察大量内存以找出损坏,这里没有段错误

python - 将包含元组列表的字典转换为列表

java - 如何使用 Thymeleaf 设置包含 & 符号的 URL?

java - 除大整数以获得精确值

c - 指针堆分配如何为 C 中的结构分配足够的空间?

python - 从字典 B 中减去字典 A(deep del)?