【问题标题】:Hashmap get function returns nullHashmap get 函数返回 null
【发布时间】:2014-03-18 19:59:34
【问题描述】:

我有一个哈希图

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#。

invertedList的完整代码:

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 工作正常,第二个,resultIds 为空。

【问题讨论】:

  • 请用您使用的语言标记您的问题。
  • 你能贴出你用来构建invertedList的代码吗?
  • 我改变了invertedList = new HashMap();到倒排列表 = new HashMap>();问题还是没有解决。
  • 我将所有受保护的字段都更改为公开,问题还没有解决。

标签: java get null hashmap


【解决方案1】:

如果我没看错,并且假设正确,这个测试函数在 InvertedIndex 类中。我只做这个假设是因为

ArrayList<Integer> resultIds =  invertedList.get("ryerson");

实际上应该是不可编译的,因为没有名为“invertedList”的局部变量。

那一行应该是

ArrayList<Integer> resultIds =  invertedIndex.invertedList.get("ryerson");

【讨论】:

    【解决方案2】:

    您的第一个断言测试invertedIndex.invertedList 的值。第二个从invertedList 获取值,而不是从invertedIndex.invertedList 获取值。您可能在测试中定义了一个同名的地图,这与invertedIndex 使用的地图不同。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多