2011-01-18 4 views
4

Я хочу определить, содержит ли подменю массива нулевую ссылку. Как-то вроде этого:Обнаружение нулевой ссылки в массиве

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, так что я не в петлю вручную через массив? Может быть, я был избалован отличной поддержкой С ++ для алгоритмический сосредоточена коды, где я могу просто написать:

#include <algorithm> 

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

я боюсь, вам придется скопировать код из вашего поста в вашей базе кода! – Guillaume

+0

Если вас интересует больше пользы в библиотеке, (помимо apache common-lang), проверьте guava, которая включает библиотеку коллекций google. –

ответ

19

Проверьте ли Arrays.asList(myArray).contains(null).

Чтобы проверить часть массива, проверьте

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

Это не создаст ненужные копии массива; оба asList и subList создают ArrayList и RandomAccessSubList объекты, которые обертывают исходный массив без его копирования.

+0

вам также нужно будет вызвать copyOfRange или что-то еще, чтобы получить только тот диапазон, который он хочет искать, и в этом случае кажется, что итерирование по массиву будет самым экономичным решением. – digitaljoel

+0

@ digitaljoel: Нет, нет. – SLaks

+1

@digitaljoel с использованием 'asList' и' subList' не дублирует данные - он использует один и тот же базовый массив, поэтому он является таким же эффективным (с точки зрения пространства как минимум) – Bozho

3

Apache commons-lang дает ArrayUtils.contains(array, null)

Для диапазона: ArrayUtils.contains(Arrays.copyOfRange(array, from, to), null)