Java 添加到空列表

Java 添加到空列表,java,list,Java,List,所以我有一个这样的空列表 List<Node> nodes = null; 显然,在空列表中执行.contains会给我一个异常错误,但为什么这样做呢 if (nodes==null){ nodes.add(node1); } 也给我一个空指针错误? 空列表似乎是不可变的。我如何仍然保持列表结构,并且仍然从空开始构建它 您必须为列表分配内存:nodes=newarraylist()在添加节点之前。您试图将节点添加到空列表中,即将节点添加到空列表中 List<

所以我有一个这样的空列表

List<Node> nodes = null;
显然,在空列表中执行.contains会给我一个异常错误,但为什么这样做呢

    if (nodes==null){
    nodes.add(node1);
}
也给我一个空指针错误?
空列表似乎是不可变的。我如何仍然保持列表结构,并且仍然从空开始构建它

您必须为列表分配内存:
nodes=newarraylist()在添加节点之前。您试图将节点添加到空列表中,即将节点添加到空列表中

List<Node> nodes = null;
这里要说的是,如果nodes==null(现在不是),则尝试将该节点添加到列表中。如果它不为null,并且node1已经在列表中(它不是),则将其添加到列表中。您可以将上面的行替换为:

if (!nodes.contains(node1)) {
    nodes.add(node1);
}

这表示如果列表中不存在节点,请添加它。

您需要首先初始化列表

nodes = new ArrayList<Node>();
nodes=newarraylist();
例如:

if (nodes==null){
   nodes = new ArrayList<Node>();
   nodes.add(node1);
}
if(节点==null){
节点=新的ArrayList();
nodes.add(node1);
}

但最好是有一个空列表,而不是一个未初始化(null)的列表

因此,不是:
List nodes=null拥有
列表节点=新建ArrayList()
然后您可以删除完整的
if
并始终使用
节点。添加(node1),无论它是第一个还是第二个元素。

nodes=new ArrayList();
nodes = new ArrayList<Node>();

将其初始化为新对象(空)应该会有所帮助。

如果
节点
null
,则无法对其执行任何操作。将其初始化为
新建ArrayList()
。这现在是一个空列表

这是一个确定的空指针异常,因为
节点
为空

你是说

if (nodes!=null){
    nodes.add(node1);
}
还要初始化列表

nodes = new ArrayList()

这是因为您尚未实例化对象“节点”

添加以下行,它应该可以工作:

 if (nodes==null){
      nodes = new ArrayList<Node>();
      nodes.add(node1);
  }
if(节点==null){
节点=新的ArrayList();
nodes.add(node1);
}

还要注意,不能实例化列表对象。因此,您可以使用类似于ArrayList/LinkedList等的内容。

您的
节点
空的
,因此这就是所说的错误。。。这是获取
空指针异常时最常见的编程错误。最好在eclipse中使用插件;它不允许你制造这种错误。您也可以更容易地检测问题。

您不能实例化
列表
接口:)哎呀,应该是
ArrayList
或类似的。我将编辑我的答案。谢谢。我刚才犯了同样的错误,你不能实例化
列表
,它必须是
数组列表
链接列表
等等,当然!谢谢你指出这一点。我想仍然是C模式:)哈哈,不用担心。我得到一条评论,告诉我我的答案也是一样的。我是C++模式的。
if (nodes!=null){
    nodes.add(node1);
}
nodes = new ArrayList()
 if (nodes==null){
      nodes = new ArrayList<Node>();
      nodes.add(node1);
  }