【问题标题】:Java ArrayList - Check if list is emptyJava ArrayList - 检查列表是否为空
【发布时间】:2012-12-18 04:31:46
【问题描述】:

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

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,它仍然会被添加到列表中。
  • null 和一个空列表不是一回事。
  • 您 [阅读 javadocs](docs.oracle.com/javase/7/docs/api/java/util/… ) ... 但是,您似乎不明白 null 的含义,这是一个更大的问题。
  • @jonhopkings:但是怎么做呢?我必须先实例化我现在猜想的数组列表。而我的 do-while 确保值 -1 不能插入到 arraylist 中?
  • @user1873613 将numbers.add(number); 替换为if (number != -1) numbers.add(number); 这将防止-1 被插入到列表中,如果-1 是用户输入的第一件事,那么当@987654328 时列表将为空@被称为

标签: java arraylist


【解决方案1】:

就这么简单:

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

请注意,快速查看 documentation 会为您提供该信息。

【讨论】:

  • 最好使用 if ((null == numbers) && (numbers.isEmpty())) {...}
  • @Jacky 是正确的,要么保证初始化,要么必须检查 null,否则会出现 NullPointerException。
  • @tonygil 如果方法是私有的,那么你应该确保 null 不会发生并且 null 检查是不必要的。如果它是公开的,您可以在 javadoc 中强制执行“非空”合同,并在方法开始时使用Objects.requireNonNull(numbers)(但它也会抛出 NPE,所以不会给您带来太多收益)。但是,检查条件中的 null 对我来说并不合适。另见:stackoverflow.com/questions/271526/avoiding-null-statements
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    您最初的问题是您正在检查列表是否为空,因为您使用List&lt;Integer&gt; numbers = new ArrayList&lt;Integer&gt;(); 实例化了它,所以它永远不会是空的。但是,您已更新代码以使用 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);
    

    【讨论】:

      【解决方案4】:

      或者,您可能还想通过 .size() 方法进行检查。非空列表的大小将大于零

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

      【讨论】:

      • 添加空检查总是更好
      【解决方案5】:

      来源:CodeSpeedy 点击了解更多Check if an ArrayList is empty or not

      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)
      

      【讨论】:

        【解决方案6】:

        现在的良好做法是使用来自 Apache Commons 或 Spring Framework 的 CollectionUtils。

        CollectionUtils.isEmpty(list))
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-02-07
          • 2022-08-18
          • 1970-01-01
          • 1970-01-01
          • 2023-03-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多