我目前正在尝试将一百万个字符串及其计数存储到 HashMap 中。 但是,我的内存总是不够用。有没有更好的方法来做到这一点,以便我以后也可以为另一项任务保留其计数?
输入为: al = new String[]{"A", "C", "G", "T", "AC", "AG", "AT", "CG", "CT", "GT", "ACGT"};
public static Map < String, Integer > combinations(String[] al) {
HashMap < String, Integer > consData = new HashMap < String, Integer > ();
String nc;
for (String s: al) {
for (String k: al) {
for (String l: al) {
for (String m: al) {
for (String n: al) {
for (String o: al) {
nc = s + "|" + k + "|" + l + "|" + m + "|" + n + "|" + o;
consData.put(nc, 0);
System.out.println(nc);
}
}
}
}
}
}
最佳答案
从您的代码来看,您似乎需要存储数百万个字符串作为 map 的键。
我看到你在 map 上放了一个数字,最初是 0。
该值从 0 开始变化的频率是多少?如果这个值并不经常不同于零,那么你有一个 sparse matrix .
在这种情况下,您可以决定仅当数据的值不为零时才将数据存储在 map 中,并使用如下所示的方法来获取通用字符串的值:
public int getValue(String key) {
Integer value = consData.get(key);
if (value == null) {
return 0;
}
return value;
}
如果该值是具有该键的现有元素的计数器,则添加方法可能如下:
public int addKey(String key) {
Integer counter = consData.get(key);
if (counter == null) {
counter = 0;
}
counter = counter + 1;
consData.put(key, counter);
}
当您有数百万个可能值,但其中只有少数有效时,通常会使用此解决方案
关于java.lang.OutOfMemoryError 不断发生,存储一百万个字符串及其计数的更好方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33875594/