LinkedList object add()函数不更新值-java

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对象的键 代码如下:

我正在创建一个反向索引字典,它从一个文件中获取大约一百万条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]);