[英]Hashmap get function returns null
我有一個哈希圖是
public HashMap<String, ArrayList<Integer>> invertedList;
在調試過程中,我在監視列表中顯示了我的反向列表:
invertedList.toString(): "{ryerson=[0, 2, 3], 23=[3], award=[1], andisheh=[0, 2]}"
在我輸入的同一監視列表中:
invertedList.get("ryerson")
結果在代碼中也得到null。 如您所見,“ ryerson”已經作為我的反向列表中的鍵存在,因此我應該得到[0,2,3]! 這是怎么回事 我很混亂!
我知道ArrayList作為值存在問題,因為我將Integer作為值進行了測試,並且效果很好,但仍然不知道如何解決。 我是Java的新手,曾經使用C#。
reverseList的完整代碼:
public class InvertedIndex {
public HashMap<String, ArrayList<Integer>> invertedList;
public ArrayList<String> documents;
public InvertedIndex(){
invertedList = new HashMap<String, ArrayList<Integer>>();
documents = new ArrayList<String>();
}
public void buildFromTextFile(String fileName) throws IOException {
FileReader fileReader = new FileReader(fileName);
BufferedReader bufferedReader = new BufferedReader(fileReader);
int documentId = 0;
while(true){
String line = bufferedReader.readLine();
if(line == null){
break;
}
String[] words = line.split("\\W+");
for (String word : words) {
word = word.toLowerCase();
if(!invertedList.containsKey(word))
invertedList.put(word, new ArrayList<Integer>());
invertedList.get(word).add(documentId);
}
documents.add(line);
documentId++;
}
bufferedReader.close();
}
測試代碼:
@Test
public void testBuildFromTextFile() throws IOException {
InvertedIndex invertedIndex = new InvertedIndex();
invertedIndex.buildFromTextFile("input.tsv");
Assert.assertEquals("{ryerson=[0, 2, 3], 23=[3], award=[1], andisheh=[0, 2]}", invertedIndex.invertedList.toString());
ArrayList<Integer> resultIds = invertedList.get("ryerson");
ArrayList<Integer> expectedResult = new ArrayList<Integer>();
expectedResult.add(0);
expectedResult.add(2);
expectedResult.add(3);
Assert.assertEquals(expectedResult, resultIds);
}
第一個Assert工作正常,第二個Assert結果為null。
你的第一個斷言測試的價值invertedIndex.invertedList
。 第二個是從invertedList
獲取一個值,而不是從invertedIndex.invertedList
獲取一個值。 您可能已經在測試中定義了一個具有相同名稱的映射,這與invertedIndex
索引所使用的映射不同。
如果我沒有看錯,並且假設正確,那么此測試函數位於InvertedIndex類內部。 我只是做這個假設,因為
ArrayList<Integer> resultIds = invertedList.get("ryerson");
實際上應該是不可編譯的,因為沒有稱為“ invertedList”的局部變量。
那行應該讀
ArrayList<Integer> resultIds = invertedIndex.invertedList.get("ryerson");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.