gpt4 book ai didi

java - 将字符数组插入 HashMap

转载 作者:行者123 更新时间:2023-12-01 18:25:11 25 4
gpt4 key购买 nike

我有一个字数统计程序,我正在从字符数组中读取内容,并将找到的每个单词(检查空格)插入到 HashMap<Character[], Integer> 中。 ,其中第一个参数是单词,第二个参数是该单词被找到的次数。

我不使用 StringBuilder 或 Tokenizer,因为我避免使用字符串,因为我正在读取 10gb 文件,并且由于字符串是不可变的,因此它似乎会导致内存问题。

以下代码在仅读取 20-30mb 的文件后似乎出现滞后。问题似乎是我的 key 是 Character[] ,所以我的 get 语句总是返回 null。不知道如何在不使用字符串的情况下解决这个问题。

注意 - 我使用 ArrayList<Character> 构建这个词- 然后我将数组列表转换为 Character [] 。我这样做是因为在检查相等性时将 ArrayList 插入到 HashMap 中是相当有问题的。另外,这个程序是多线程的,每个线程都有自己的 HashMap 。

public void run() {
int i = 0; Integer check;
ArrayList<Character> charBuilder = new ArrayList<Character>();
Character [] inserter;
for (i = 0; i < newbyte.length; i++) {
if(newbyte[i] != ' ') {
charBuilder.add(newbyte[i]);
}
else { //delimiter found, insert word into local hashmap, clear builder
//convert to char [] first
inserter = charBuilder.toArray(new Character[charBuilder.size()]);
check = map.get(inserter);
if (check != null) { //already exists an entry
map.put(inserter, check + 1);
}
else {
map.put(inserter, 1);
}
charBuilder.clear();
inserter = null;
}
}

和构造函数

BigCountThread3(char[] newbyte, 
HashMap<Character[], Integer> hashMap) {

最佳答案

问题是 char[] 等于。您将一个字符数组作为键,当您尝试从映射中获取键时,将调用该键的 equals 方法。由于仅当两个键指向相同引用时 char 数组 equals 才会为 true,并且如果您创建相同的字符数组,则它将不起作用,因为它们将是具有相同字符的两个不同数组。

此外,我认为将数组作为 map 中的键是一个坏主意。

关于java - 将字符数组插入 HashMap ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26474545/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com