我必须在 map 中存储大量数据,总大小非常重要。 map 的数量很多,每个 map 的大小很小(大多数 map <10 个映射)并且 map 在创建后不会改变。
我看到两种方式(假设我知道将存储 n 个映射):
- 使用初始大小为 n 和加载因子为 1 的
HashMap
- 使用大小为 n 的
ArrayList
,存储 (Key, Value) 对。像使用 Map 一样实现get()
方法
有没有更好的方法(也许是 Guava ImmutableMap
)?
最佳答案
对于不再添加键的映射,可以使用优化的哈希函数:一个尽可能小的数组,以及影响最小的冲突。
除了学术论文之外,还可以从 n 个不同的较小函数/值实体构建哈希函数,并且可以通过尝试对数据集进行组合来找到最优值。并且具有不同的数组大小。
由于这个领域太宽泛(如重新散列),请进一步搜索或自己动手。
如果您获得了许多值,则采用相同的对象实例,而不是拥有许多相同的不同对象。这是通过身份映射 Map<T, T>
完成的仅使用第一个放置键。
- TreeMap 适用于与 LinkedList w.r.t. 一样低效的大数据。数组列表。
- HashMap 的实现对于效率来说非常有趣。最后一个人可以做同样的事
ArrayList.trimToSize()
尽管可能无关紧要。
关于java - 如何使用 map 节省空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29818487/