2010-08-01 14 views

risposta

15

C'è un metodo contains per le liste, così si dovrebbe essere in grado di fare:

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

Attenzione: questo potrebbe non fare quello che (o io) si aspetta, si veda il commento di Tom di seguito.

+2

Questo è piuttosto breve, ma questo caso d'uso è abbastanza comune che avrebbero dovuto aggiungere una funzione nella lingua – Casebash

+2

Attenzione a non usarlo con gli array primitivi. –

+0

@ Tom: Perché no? Non funziona? – Casebash

5

Utilizzare un ciclo for. Non c'è nulla nella matrice. Oppure passa a una classe Collection java.util.

7

Si potrebbe prendere in considerazione l'utilizzo di un'implementazione Collection invece di un array piatto.

L'interfaccia Collection definisce un metodo contains(Object o), che restituisce true/false.

ArrayList attuazione definisce un indexOf(Object o), che fornisce un indice, ma tale metodo non è in tutte le implementazioni di raccolta.

Entrambi questi metodi richiedono adeguate implementazioni del metodo equals(), e probabilmente desidera un metodo di hashCode() correttamente applicato nel caso in cui si utilizza un hash basato Collection (per esempio HashSet).

3

È possibile utilizzare uno dei molti metodi Arrays.binarySearch(). Tenere presente che l'array deve essere ordinato per primo.

+1

Questa è un'opzione solo gli elementi dell'array sono simili. –

+2

Possiamo solo supporre che questo è il caso, ad es. una serie di ints, stringhe, ecc. Puoi sempre fornire un custom ['Comparator'] (http://download.oracle.com/javase/6/docs/api/java/util/Comparator.html) per ordinare e cerca se necessario. – krock

+0

difficile credere che non ci sia Arrays.search ... rogerdpack

7

con Java 8, si può fare questo:

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

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

avresti bisogno di fare

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

se si sta lavorando con gli oggetti.

Problemi correlati