【发布时间】:2016-11-02 19:46:54
【问题描述】:
我正在创建一个倒排索引字典,它从一个文件中获取一百万条左右的推文,将这些推文中的单词存储为字典中的键 (HashMap) 和指向帖子列表 (LinkedList) 的指针,其中包含文档 ID(推文用户名、日期等)作为键的值。
我的函数将单词存储为 HashMap 的键没有问题,并且应该为每个单词的出现存储一个指向帖子列表的对象指针作为键的值。但是由于某种原因,当我尝试更新列表时它不起作用。读取整个文件后,HashMap 会包含以 null 对象为值的键。
这里的代码:
String line = scanner.nextLine();
String[] lineArr = line.split(" ");
DocID id = new DocID(lineArr[0], lineArr[1],lineArr[2]);
for(int i=3; i<lineArr.length; i++){
ListPointer list = new ListPointer();
if(dict.containsKey(lineArr[i].toLowerCase())) list = dict.get(lineArr[i]);
list.postings.add(id);
dict.put(lineArr[i].toLowerCase(), list);
}
}
应该存储一个具有列表属性的对象作为值,有效地充当指向列表的指针。如果表中存在类似的键,则获取该值,并更新该值的列表属性并再次设置为该键的值。
我知道使用 LinkedList 作为 HashMap 的值,而不是使用包含固有列表的对象会更好,但我们被告知,帖子列表应该单独存储,而不应该是字典类的属性,并且字典应该只包含一个指向其相关帖子列表的指针。
到目前为止,这些是对象及其成员:
public static HashMap<String, ListPointer> dict;
public static class DocID{
public String userID;
public String date;
public String time;
public DocID(String dte, String tme, String id){
this.userID = id;
this.date = dte;
this.time = tme;
}
}
public static class ListPointer{
public static LinkedList<DocID> postings;
public ListPointer(){
postings = new LinkedList<DocID>();
}
}
我可以理解这是否是一个覆盖错误,但不是,在完整读取文件时 HashMap 中每个键的值都是 null,我不知道为什么会这样?
【问题讨论】:
标签: java pointers dictionary linked-list hashmap