LinkedList object add()函数不更新值-java
我正在创建一个反向索引字典,它从一个文件中获取大约一百万条tweet,将这些tweet中的单词作为关键字存储在字典(HashMap)中,并创建一个指向帖子列表(LinkedList)的指针,其中包含文档ID(tweet用户名、日期等)作为关键字的值 My函数将单词存储为HashMap的键,没有问题,并且应该为单词的每次出现存储指向postings列表的对象指针作为键的值。但由于某种原因,当我尝试更新列表时,它不起作用。一旦读取了整个文件,HashMap就会包含值为null对象的键 代码如下:LinkedList object add()函数不更新值-java,java,pointers,dictionary,linked-list,hashmap,Java,Pointers,Dictionary,Linked List,Hashmap,我正在创建一个反向索引字典,它从一个文件中获取大约一百万条tweet,将这些tweet中的单词作为关键字存储在字典(HashMap)中,并创建一个指向帖子列表(LinkedList)的指针,其中包含文档ID(tweet用户名、日期等)作为关键字的值 My函数将单词存储为HashMap的键,没有问题,并且应该为单词的每次出现存储指向postings列表的对象指针作为键的值。但由于某种原因,当我尝试更新列表时,它不起作用。一旦读取了整个文件,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);
}
}
String line=scanner.nextLine();
字符串[]lineArr=line.split(“”);
DocID id=新的DocID(lineArr[0],lineArr[1],lineArr[2]);
对于(int i=3;i您的postings
成员不应该是静态的。您在所有ListPointer
实例中共享了一个实例,并且每次调用ListPointer
构造函数时,您都会用一个空的LinkedList
覆盖它
改变
public static LinkedList<DocID> postings;
到
如果要将小写的字符串
传递给containsKey
,则必须将相同的小写字符串
传递给get
。否则get
将返回null
,如果原始键不是小写。我发现两个问题:
问题1
public static class ListPointer{
public static LinkedList<DocID> postings;
...
我认为主要的问题在这一行。您试图用小写匹配所有内容,但是当您从dict获得密钥时,您没有使用。toLowerCase()这现在在行列表上给了我一个NullPointerException。postings.add(id);知道为什么吗?@NoName你刚刚删除了static关键字吗?是的,我知道你上面说的,没有static关键字,当我使用add()时,它给我一个NullPointerExceptionoperation@NoName你确定异常在列表.过帐.添加(id);
上吗?这没有意义,因为你初始化了列表
(或从地图上获取)postings
是在ListPointer
构造函数中初始化的。好吧,奇怪的事情发生了,我注释掉了上面的那行,它从映射值中获得ListPointer,代码运行正常,所以这行代码有错误吗?非常感谢您的洞察力,但是在上面的回答中解决了这两个问题
public LinkedList<DocID> postings;
if(dict.containsKey(lineArr[i].toLowerCase())) list = dict.get(lineArr[i]);
if(dict.containsKey(lineArr[i].toLowerCase())) list = dict.get(lineArr[i].toLowerCase());
public static class ListPointer{
public static LinkedList<DocID> postings;
...
if(dict.containsKey(lineArr[i].toLowerCase())) list = dict.get(lineArr[i]);