【问题标题】:Detect null reference in an array检测数组中的空引用
【发布时间】:2011-06-11 09:59:07
【问题描述】:

我想检测数组的子范围是否包含空引用。有点像这样:

public static <T> boolean containsNull
(T[] array, int fromInclusive, int toExclusive)
{
    for (int i = fromInclusive; i < toExclusive; ++i)
    {
        if (array[i] == null) return true;
    }
    return false;
}

Java 库中是否有这样的方法,所以我不必手动循环遍历数组?也许我已经被 C++ 对专注于算法的代码的出色支持宠坏了,我可以在这里写:

#include <algorithm>

bool found_null = (std::find(array + from, array + to, 0) != array + to);

【问题讨论】:

  • 我担心您必须将帖子中的代码复制到您的代码库中!
  • 如果您对图书馆的更多优点感兴趣,(除了 apache common-lang)请查看 guava,其中包括 google 的收藏库。

标签: java c++ arrays algorithm null


【解决方案1】:

检查是否Arrays.asList(myArray).contains(null)

要检查数组的一部分,检查是否

Arrays.asList(myArray).subList(from, to).contains(null)

这不会创建不必要的数组副本; asListsubList 都创建了 ArrayListRandomAccessSubList 对象来包装原始数组而不复制它。

【讨论】:

  • 您还必须调用 copyOfRange 或其他东西才能仅获得他想要搜索的范围,在这种情况下,您自己迭代数组似乎是最具成本效益的解决方案。
  • @digitaljoel 使用 asListsubList 不会复制数据 - 它使用相同的后备数组,因此它同样高效(至少在空间方面)
  • 我一直不明白为什么 Arrays 类没有简单的包含操作。不得不依赖 Apache 似乎是多余的。
  • 啊,我错过了第二个代码示例中的 subList 调用。对此感到抱歉。
  • @Fred:他指的是另一个答案。
【解决方案2】:

Apache commons-lang 给你ArrayUtils.contains(array, null)

对于范围:ArrayUtils.contains(Arrays.copyOfRange(array, from, to), null)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-28
    • 1970-01-01
    • 2017-07-09
    • 1970-01-01
    • 1970-01-01
    • 2016-03-24
    • 1970-01-01
    相关资源
    最近更新 更多