2010-08-01 2 views

ответ

15

Существует contains метод для списков, так что вы должны быть в состоянии сделать:

Arrays.asList(yourArray).contains(yourObject); 

Внимание: это не может делать то, что вы (или я) ожидать, смотрите комментарии Тома ниже.

+2

Это довольно короткий, но этот прецедент достаточно распространен, что они действительно должны были добавить функцию на язык – Casebash

+2

Будьте осторожны, чтобы не использовать это с примитивными массивами. –

+0

@Tom: Почему бы и нет? Разве это не работает? – Casebash

5

Используйте петлю для петли. В массив нет ничего. Или переключитесь на класс коллекции java.util Collection.

7

Возможно, вы захотите использовать реализацию вместо плоского массива.

Интерфейс Collection определяет метод contains(Object o), который возвращает true/false.

ArrayList реализация определяет indexOf(Object o), который дает индекс, но этот метод не относится ко всем реализациям коллекции.

Оба эти методы требуют надлежащей реализации методы equals(), и вы, вероятно, хотите правильно реализованный hashCode() метода только в случае, если вы используете хэш на основе Collection (например HashSet).

3

Вы можете использовать один из множества методов Arrays.binarySearch(). Имейте в виду, что сначала необходимо отсортировать массив.

+1

Это опция, только элементы массива сравнимы. –

+2

Мы можем только предположить, что это так, например. массив из ints, Strings и т. д. Вы всегда можете предоставить пользовательский ['Comparator'] (http://download.oracle.com/javase/6/docs/api/java/util/Comparator.html) для сортировки и если необходимо. – krock

+0

трудно поверить, что нет Arrays.search ... rogerdpack

7

С Java 8, вы можете сделать это:

int[] haystack = {1, 2, 3}; 
int needle = 3; 

boolean found = Arrays.stream(haystack).anyMatch(x -> x == needle); 

Вы должны были бы сделать

boolean found = Arrays.stream(haystack).anyMatch(x -> needle.equals(x)); 

, если вы работаете с объектами.

Смежные вопросы