Java ArrayList - 检查列表是否为空

63

如何检查一个列表是否为空?如果是空的,系统必须给出一个消息,显示列表为空。如果不是空的,系统必须给出一个消息,显示列表不为空。 用户可以输入数字-1来停止程序。 这是我现在拥有的代码,但它不起作用,它总是显示“列表不为空”。

import java.util.*;
import javax.swing.JOptionPane;

public class ArrayListEmpty 
{
    public static void main(String[] args) 
    {
        List<Integer> numbers = new ArrayList<Integer>();
        int number;
        do {
            number = Integer.parseInt(JOptionPane.showInputDialog("Enter a number (-1 to stop)"));
            numbers.add(number);
        } while (number != -1);
        giveList(numbers);
    }

    public static void giveList(List<Integer> numbers)
    {
        if (numbers != null)
            JOptionPane.showMessageDialog(null, "List isn't empty");
        else
            JOptionPane.showMessageDialog(null, "List is empty!");
    }
}

1
你总是收到“列表不为空”的消息,这是因为你在实例化并添加数字后才进行检查。即使用户输入-1,它仍然会被添加到列表中。 - jonhopkins
1
null 和空列表并不是同一回事。 - SLaks
1
阅读了Javadocs ... 但是,似乎你不理解null的含义,这是一个更大的问题。 - Brian Roach
@jonhopkings:但是怎么做呢?我想我需要先实例化我的ArrayList。我的do-while循环确保值-1不能被插入到ArrayList中? - STheFox
@user1873613 将 numbers.add(number); 替换为 if (number != -1) numbers.add(number); 这样可以防止将 -1 插入列表中,如果用户输入的第一项是 -1,则在调用 giveList 时列表将为空。 - jonhopkins
@STheFox:对于未来的读者:do while 循环总是至少执行一次,所以 -1 将被添加,然后才进行检查。 - ShadowFlame
6个回答

172

就像这样简单:

if (numbers.isEmpty()) {...}

请注意,查看文档就能得到这个信息。


19
最好使用 if ((null == numbers) && (numbers.isEmpty())) {...}。 - LiangWang
2
@Jacky是正确的,要么你保证初始化,要么你必须检查null,否则你就会遇到NullPointerException。 - tony gil
1
@tonygil 如果该方法是私有的,则应确保 null 不会发生,并且不需要进行空检查。如果它是公共的,则可以在 javadoc 中强制执行“非空”合同,并在方法开头使用 Objects.requireNonNull(numbers)(但它也会抛出 NPE,因此并没有太大用处)。但是,在条件中检查 null 对我来说看起来不正确。另请参阅:https://dev59.com/AHVC5IYBdhLWcg3whBaj - assylias

19

你应该使用方法listName.isEmpty()


4
现在的最佳实践是使用来自Apache Commons或Spring Framework的CollectionUtils。
CollectionUtils.isEmpty(list))

3
您最初的问题是检查列表是否为空,但由于您使用了 List<Integer> numbers = new ArrayList<Integer>(); 进行了实例化,因此它永远不会为空。不过,您已经更新了代码,使用 List.isEmpty() 方法来正确地检查列表是否为空。

现在的问题是,您从未向 giveList() 发送空列表。在 do-while 循环中,您将任何输入数字添加到列表中,即使它是 -1。为了防止添加 -1,请将 do-while 循环更改为仅在数字不是 -1 时才添加。然后,如果用户的第一个输入数字是 -1,则列表将为空。
do {
    number = Integer.parseInt(JOptionPane.showInputDialog("Enter a number (-1 to stop)"));
    /* Change this line */
    if (number != -1) numbers.add(number);
} while (number != -1);

1

或者,您也可以通过 .size() 方法进行检查。不为空的列表将具有大于零的大小

if (numbers.size()>0){
//execute your code
}

最好添加空值检查。 - MMK

-3

来源:CodeSpeedy 点击了解更多检查ArrayList是否为空

import java.util.ArrayList;
public class arraycheck {
public static void main(String args[]){
ArrayList<Integer> list=new ArrayList<Integer>();

    if(list.size()==0){
        System.out.println("Its Empty");

    }
    else
        System.out.println("Not Empty");

   }

}

输出:

run:
Its Empty
BUILD SUCCESSFUL (total time: 0 seconds)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接