BinarySearch

1 resposta
ricardocomp

Olá pessoal,
eu não estou conseguindo entender
os resultados do método BinarySearch
será que alguém poderia me ajudar a
entender os resultado desse método?

import java.util.*;
//O que acontece se eu remover o generico <String>???

class SearchObjArray{
	public static void main(String[] args){
		String[] sa = {"one", "two", "three", "four"};
		Arrays.sort(sa);
		for(String s: sa){
			System.out.print(s + " ");
		}
		System.out.println("\nfour = " + Arrays.binarySearch(sa, "four"));
		System.out.println("one = " + Arrays.binarySearch(sa, "one"));
		System.out.println("three = " + Arrays.binarySearch(sa, "three"));
		System.out.println("two = " + Arrays.binarySearch(sa, "two"));
						
		System.out.println("now reverse sort");
		ReSortComparator rs = new ReSortComparator();
		Arrays.sort(sa,rs);
		for(String s: sa){
			System.out.print(s + " ");
		}
		System.out.println("\nfour = " + Arrays.binarySearch(sa, "four"));
		System.out.println("one = " + Arrays.binarySearch(sa, "one"));
		System.out.println("three = " + Arrays.binarySearch(sa, "three"));
		System.out.println("two = " + Arrays.binarySearch(sa, "two"));
		
		System.out.println("one = " + Arrays.binarySearch(sa, "one", rs));
	}
	static class ReSortComparator implements Comparator<String>{
		public int compare(String a, String b){
			return b.compareTo(a);
		}
	}
}

Resultados

/*
four one three two 
four = 0
one = 1
three = 2
two = 3
now reverse sort
two three one four 
four = -1
one = -1
three = 1
two = -5 PORQUE????
one = 2
*/

[]'s.

1 Resposta

Josemar_Jobs

Aparecem esses números, porque vc não passou o Comparator para o método binarySearch(. . .).
Depois que vc classifica um array usando um Comparator, se vc tentar fazer uma busca no array
sem passar esse mesmo Comparator, os resultados serão imprevisíveis.

Criado 18 de agosto de 2010
Ultima resposta 18 de ago. de 2010
Respostas 1
Participantes 2