2010-09-09 12 views
6
String[] sortedArray = new String[]{"Quality", "Name", "Testing", "Package"}; 

// Search for the word "cat" 
int index = Arrays.binarySearch(sortedArray, "Quality"); 

Siempre me -3. El problema está en "Name". ¿Por qué no puedo tener "Name" en mi matriz? ¿Alguna idea?java Arrays.binarySearch no encuentra apuntar

+1

"Nombre" debe estar antes de "Calidad", y "Paquete" debe estar antes de "Prueba". –

+1

binarySearch es solo para una matriz ordenada. –

+0

@Jon, creo que quisiste decir que "Paquete" debería venir antes de "Calidad". –

Respuesta

23

Para utilizar binarySearch, tendrá que ordenar primero la matriz sí mismo:

String[] sortedArray = new String[]{"Quality", "Name", "Testing", "Package"}; 

java.util.Arrays.sort(sortedArray); 

int index = Arrays.binarySearch(sortedArray, "Quality"); 
+0

todo para una ayuda rápida – user437630

+0

@senzacionale, de nada. –

6

La matriz debe ser ordenada. Desde Javadoc de binarySearch():

El rango debe ordenarse en orden ascendente de acuerdo con el orden natural de sus elementos antes de realizar esta llamada. Si no está ordenado, los resultados no están definidos.

1

Una matriz, que deben seleccionarse para la búsqueda binaria para trabajar. El Javadoc para binarySearch dice esto:

La matriz debe ser ordenado en orden ascendente de acuerdo con el ordenamiento natural de sus elementos (como por el tipo (método []) objeto) antes de hacer esta llamada. Si no está ordenado, los resultados no están definidos.

(Énfasis añadido.)

Y la razón es simple. El algoritmo de búsqueda binaria tiene como condición previa que la matriz de entrada esté ordenada.