我正在創建一個wordcount程序,我在其中創建N
線程,並且每個線程都收到一個char[]
包含許多不同數字的緩衝區,如[2355 3326 94438 123 123...]
我想創建一個映射,其中鍵是數字本身,而價值是它出現了多少時間。我將從char[]
數組轉換爲一個整數,如下所示。putIfAbsent總是返回null
但是,似乎每次我撥打putIfAbsent()
時,它總是返回null
,這意味着它沒有找到該值的關鍵字。這沒有意義,因爲我的文本文件中有數千個重複值。該地圖最終應該在300kb左右,而不是一個千兆字節。
newbyte[]
是char[]
只包含數字和空格
爲什麼始終的putIfAbsent返回null?
此外,當我打印的地圖完成後,它看起來像這樣:
233303192 = 1
1770057208 = 1
1323329638 = 1
50 = 1
962422124 = 1
472527478 = 1
936125441 = 1
-350637153 = 1
-601349585 = 1
這是很奇怪的,因爲任何輸入的最大值爲65535不知道如何這使得任何意義。
public void run() {
int counter = 0; int i; Integer check; int j =0; int temp = 0; int intbuilder = 0;
for (i = 0; i < newbyte.length; i++) {
if (newbyte[i] != ' ') { //delimiter is not found, so add to temp char array
intbuilder = (intbuilder * 10) + (int)newbyte[i];
counter++;
}
else {
check = wordCountMap.putIfAbsent(intbuilder, 1);
if (check != null) {
wordCountMap.put(intbuilder, check + 1);
}
intbuilder = 0;
也許不是你的問題,但不是'(INT)newbyte [I]'你可能意味着'(INT)(newbyte [I] - '0')'。 – OldCurmudgeon
你可能是對的,但它沒有幫助。順便說一下,我的映射是ConcurrentHashMap –
DanGordon