所以我有一个像这样的空列表
List<Node> nodes = null;
Run Code Online (Sandbox Code Playgroud)
然后我想在其中添加"Node"
try {
File file = new File("test.txt");
Scanner scanner = new Scanner(file);
while (true){
String first= scanner.next();
if (first.equals("-1")){
break;
}
Node node1= new Node(first, first);
if (nodes==null){
nodes.add(node1);
}
if (nodes!=null){
if(nodes.contains(node1)){
nodes.add(node1);
}
}
Run Code Online (Sandbox Code Playgroud)
所以很明显在空列表中执行.contains会给我一个异常错误,但为什么这样做呢
if (nodes==null){
nodes.add(node1);
}
Run Code Online (Sandbox Code Playgroud)
还给我一个空指针错误?似乎空列表是不可变的.我怎样才能保持List结构并仍然从空构建它?
Mat*_*ell 10
List<Node> nodes = null;
Run Code Online (Sandbox Code Playgroud)
这不是一个空列表,这是一个列表引用,它被初始化为null.你想要的是:
List<Node> nodes = new LinkedList<Node>();
Run Code Online (Sandbox Code Playgroud)
或类似的.这会给你一个空列表.
编辑:更改问题后,这个逻辑完全搞砸了:
Node node1= new Node(first, first);
if (nodes==null){
nodes.add(node1);
}
if (nodes!=null){
if(nodes.contains(node1)){
nodes.add(node1);
}
}
Run Code Online (Sandbox Code Playgroud)
你在这里说的是,如果nodes == null(现在不是),那么尝试将节点添加到列表中.如果它不为null,并且node1已经在列表中(它不是),则将其添加到列表中.您可以将以上行替换为:
if (!nodes.contains(node1)) {
nodes.add(node1);
}
Run Code Online (Sandbox Code Playgroud)
如果节点不存在于列表中,则添加它.
您必须nodes = new ArrayList<Node>();在添加节点之前为列表分配内存。您正在尝试将一个节点添加到空列表中,即向空列表中添加一个节点。