Arrays.binarySearch e seus resultados negativos

 
 

 
 

import java.util.*;

 
 

public class Teste {

public static void main(String[] args){

String[] s = {“a”, “b”, “d”, “e”};

show(s);

System.out.println();

System.out.println(“\’a\’ e achado em ” + Arrays.binarySearch(s,”a”));

System.out.println(“\’e\’ e achado em ” + Arrays.binarySearch(s,”e”));

System.out.println(“\’c\’ seria inserido em ” + Arrays.binarySearch(s,”c”));

System.out.println(“\’f\’ seria inserido em ” + Arrays.binarySearch(s,”f”));

System.out.println(“\’z\’ seria inserido em ” + Arrays.binarySearch(s,”z”));

 
 

}

public static void show(String[] s){

for(String str: s){

System.out.print(str + ” “);

}

}

}

Output:

a b d e

‘a’ e achado em 0

‘e’ e achado em 3

‘c’ seria inserido em -3

‘f’ seria inserido em -5

‘z’ seria inserido em -5

 
 

 
 

No código acima é dada a sequência [a, b, d, e]. Fazemos 5 pesquisas no conteúdo da array. Repare que a letra ‘a’ é achada na posição ‘0’ da array. Já a letra ‘e’ é achada na posição ‘3’ da array, ou seja, se executássemos o seguinte código obteriamos a resposta que segue:

 
 

System.out.println(s[0]);

System.out.println(s[3]);

Output:

a

e

 
 

Como pode-se ver ‘0’ é uma posição válida (lembrando que invocamos o primeiro elemento de uma array). Portanto, uma resposta negativa obtida pelo método Arrays.binarySearch representa:

 
 

(ponto de inserção) 3 (posição -1)

 
 

portanto, a resposta -3 significa que o caractere (objeto pesquisado) não foi encontrado e deveria ser inserido na posição (3 – 1) = 2 para manter a ordem.

 
 

[p0]a[p1]b[p2]d[p3]e[p4]f

[ip -1]a[ip -2]b[ip -3]d[ip -4]e[ip -5]f

 
 

Leia-se:

[p] – point

[ip] – insertion point

 
 

 
 

O exemplo abaixo é idêntico ao primeiro exemplo só que utilizando de uma classe que promove a ordenaçao inversa dos elementos na array de strings:

 
 

import java.util.*;

 
 

public class Teste {

public static void main(String[] args){

String[] s = {“a”, “b”, “d”, “e”};

InvertSort invert = new InvertSort();

Arrays.sort(s, invert);

show(s);

System.out.println();

System.out.println(“\’a\’ e achado em ” + Arrays.binarySearch(s,”a”, invert));

System.out.println(“\’e\’ e achado em ” + Arrays.binarySearch(s,”e”, invert));

System.out.println(“\’c\’ seria inserido em ” + Arrays.binarySearch(s,”c”, invert));

System.out.println(“\’f\’ seria inserido em ” + Arrays.binarySearch(s,”f”, invert));

System.out.println(“\’z\’ seria inserido em ” + Arrays.binarySearch(s,”z”, invert));

 
 

}

public static void show(String[] s){

for(String str: s){

System.out.print(str + ” “);

}

}

}

 
 

class InvertSort implements Comparator<String>{

public int compare(String s1, String s2){

return s2.compareTo(s1);

}

}

 
 

Output:

e d b a

‘a’ e achado em 3

‘e’ e achado em 0

‘c’ seria inserido em -3

‘f’ seria inserido em -1

‘z’ seria inserido em -1

 
 

Esta entrada foi publicada em Arrays & Colletions com as etiquetas . ligação permanente.

Deixe uma Resposta

Preencha os seus detalhes abaixo ou clique num ícone para iniciar sessão:

Logótipo da WordPress.com

Está a comentar usando a sua conta WordPress.com Terminar Sessão / Alterar )

Imagem do Twitter

Está a comentar usando a sua conta Twitter Terminar Sessão / Alterar )

Facebook photo

Está a comentar usando a sua conta Facebook Terminar Sessão / Alterar )

Google+ photo

Está a comentar usando a sua conta Google+ Terminar Sessão / Alterar )

Connecting to %s