【发布时间】: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
>();问题还是没有解决。 -
我将所有受保护的字段都更改为公开,问题还没有解决。