簡體   English   中英

Hashmap get函數返回null

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM