java - 在 hashmap 中存储 String 数据类型时,有什么技巧可以减少内存使用吗?

标签 java string hashmap

我需要在 map 中存储值对(单词和数字)。

我正在尝试使用 Trove 库中的 TObjectIntHashMap 并将 char[] 作为键,因为我需要最小化内存使用量。但是用这个方法,当我使用get()方法时,我无法获取到值。
我想我不能使用原始字符数组存储在 Map 中,因为哈希码问题。

我尝试使用 TCharArrayList 但这也占用了很多内存。
我阅读了另一个与我的目的相似的 stackoverflow 问题,并建议使用 TLongIntHashMap ,将 String 字的编码值存储在 long 数据类型中。在这种情况下,我的单词可能包含拉丁字符或出现在维基百科集合中的各种其他字符,我不知道 Long 是否足以进行编码。

我尝试过使用 Trie 数据结构来存储它,但我还需要考虑我的性能并选择内存使用和性能最好的。

您对这个问题有什么想法或建议吗?

最佳答案

听起来最紧凑的数据存储方式是使用以 UTF-8 或类似方式编码的 byte[]。您可以将它包装在您自己的类中,或者编写您自己的 HashMap,它允许 byte[] 作为键。

我会重新考虑花多少时间来节省一些内存是值得的。如果您谈论的是 PC 或服务器,您需要为一个小时的工作节省 1 GB 的最低工资,所以如果您只想节省 100 MB,那大约需要 6 分钟,包括测试。

关于java - 在 hashmap 中存储 String 数据类型时,有什么技巧可以减少内存使用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13054511/

相关文章:

java:字符串索引超出范围:6

java - 自定义通用类作为 HashMap 问题的关键

java - 自动检测正确 map

Java HashMap 。它应该用于多少条最大记录?

javascript - 使用高效算法对数组中的相同对进行计数

java - 线程 "main"org.apache.spark.sql.AnalysisException 中出现异常 : cannot resolve 'named_struct()' due to data type mismatch:

java:如何设置 native .exe的兼容模式?

java - 使用 SeekBar 更新 Android 布局中的计算值

javascript - 通过组合字符串和变量来创建新的 JavaScript 变量

ios - 如何在 Objective C (iOS) 中将字符串转换为对象变量