Ciao ragazzi, quando uso Arrays.binarySearch() su un array di tipi fondamentali
(int, long etc....) per cercare un elemento che sono sicuro di non trovare
il metodo restituisce l'indice presunto + 1 con segno negativo, per esempio
se l'elemento da me cercato si trovasse nell'indice 2 il metodo
mi restituirebbe -3.
Ecco ma quando uso lo stesso metodo con gli oggetti passando un oggetto
Comparator per l'ordinamento, il metodo mi restituisce l'indice effettivo
dove si dovrebbe trovare l'elemento, nel caso di prima mi restituisce 2
malgrado l'oggetto non sia nella lista, un esempio
Qualcuno mi dice dove sbaglio, ciaocodice:import java.util.Arrays; import java.util.Comparator; import java.util.Random; /** * * @author mau2 */ public class TryArrays { public static void main(String[] args) { Num [] numbers = new Num[4]; numbers[0] = new Num(0); numbers[1] = new Num(1); numbers[2] = new Num(2); numbers[3] = new Num(27); int [] numInt = new int[3]; numInt[0] = 1; numInt[1] = 2; numInt[2] = 4; int j = Arrays.binarySearch(numInt, -1); int i = Arrays.binarySearch(numbers, new Num(-1), new NumComparator()); System.out.println(j);//visualizza - 3, tutto ok System.out.println(i);//visualizza 1 e non -1 come dovrebbe //numbers[1] ha il membro uguale ad //1 e non -1 come l'oggetto passato //come chiave. } public static class NumComparator implements Comparator<Num> { public int compare(TryArrays.Num o1, TryArrays.Num o2) { if( Integer.parseInt(o1.toString()) < Integer.parseInt(o2.toString()) ) return -1; else if(Integer.parseInt(o1.toString()) < Integer.parseInt(o2.toString())) return 1; else return 0; } } public static class Num{ private int num; public Num(int n){ num = n; } public String toString() { return String.valueOf(num); } } }![]()

Rispondi quotando

