【问题标题】:Java ArrayList size with empty element []Java ArrayList 大小与空元素 []
【发布时间】:2015-01-06 20:59:54
【问题描述】:

我有一个 ArrayList,由于某种原因我必须添加空字符串元素“”:

ArrayList<String> rList = new ArrayList<String>();
rList.add("");

当我读取数组列表 rList 的大小时,rList.size() == 1 和 rList.isEmpty() == false。

如何查看这种数组列表?空元素会导致大小等于1而不是空吗?

【问题讨论】:

  • 是的,在数学中,仅由空集组成的集合是空的。这里集合不关心字符串的值,而是关心它的存在。
  • 等等,什么?空集的集合在数学上是非空的;例如它是en.wikipedia.org/wiki/… 中的 1。
  • 你是什么意思How can I check this kind of array list?
  • @DrewKennedy,我的意思是我想检查数组列表是否只包含“”元素,如果是,我会做一些事情。
  • 我添加了与您问题的那部分相关的答案。

标签: java arraylist


【解决方案1】:

即使您将一个空字符串添加到列表中,您仍然会将 something 添加到列表中。而且,这才是最重要的。

数据可能为空(甚至null,因为ArrayList 将允许您插入null),但大小会增加(并且列表不会为空)。

现在,如果您只想检查列表中是否只有 sort 元素(正如您在 cmets 中所述),那么可以这样:

if(rList.size() == 1 && "".equals(rList.get(0)) {
    // perform work
}

只有当列表中只有一个条目,并且只有当它是空字符串时,上面的行才会成功。字符串文字和get 的反面是为了防止NullPointerException,因为如果你把它翻转过来,就会发生这种情况,并且元素0 中有null

【讨论】:

    【解决方案2】:

    检查字符串是否为空: 字符串 x =""; boolean isXEmpty = x.isEmpty();

    是的,空字符串实例与任何其他字符串一样是有效实例。所以它会计数。

    【讨论】:

    • 谢谢,我想我可以听从你的建议。
    【解决方案3】:

    要检查空列表,请使用以下代码: 即使列表大小为 1,但它的 get() 方法返回 null。 这样您就可以确保实际列表没有任何价值。

    if(someList.get(0)!=null)
    

    【讨论】:

    • 如果列表不包含任何元素,这可能仍会引发 IndexOutOfBoundsException。
    【解决方案4】:

    要回答您的问题How can I check this kind of array list?,您可以检查索引以通过迭代查看您的 ArrayList 是否包含任何特定值。

    ArrayList<String> rList = new ArrayList<String>();
    rList.add("");
    
    for (String item : rList) {
        if (item.equals("")) {
            //do something
        }
    }
    

    如果您要检查 ArrayList 的所有索引是否都是空字符串,一种方法是添加一个计数器并将其与 ArrayList 的大小进行比较。

    ArrayList<String> rList = new ArrayList<String>();
    rList.add("");
    rList.add("");
    rList.add("");
    
    int crossCheck = 0;
    
    for (String item : rList) {
        if (item == null) {//equals() will throw a NPE when checking for null values
            //do something
        } else if (item.isEmpty()) {
            crossCheck++;
            //do something
        }
    }
    //both are 3 in this case
    if (rList.size() == crossCheck) {
        //all indices are empty Strings
    }
    

    Makoto 为您的其余问题提供了很好的答案。

    【讨论】:

    • 如果列表包含null 条目会怎样?
    • 问题中没有提到索引为空。
    • 嗯,不,但这不是我的意思。我们已经确定一个列表可以包含null 并且是非空的;如果你想确定你没有得到NullPointerException,你必须重新排序equals
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-18
    • 2013-05-07
    • 2015-05-30
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多