On Feb 16, 11:49 pm, Lawrence Louie <lawrence.lo...@gmail.com> wrote: > import java.util.Collections; > import java.util.Iterator; > import java.util.LinkedList; > import java.util.List; > > public class Question { > > /** > * @param args > */ > public static void main(String[] args) { > // TODO Auto-generated method stub > > List ll = new LinkedList(); > ll.add(new Integer (5)); > ll.add(new Integer (8)); > ll.add(new Integer (3)); > ll.add(new Integer (4)); > > int index5 = Collections.binarySearch(ll, new Integer(5)); > int index8 = Collections.binarySearch(ll, new Integer(8)); > int index3 = Collections.binarySearch(ll, new Integer(3)); > int index4 = Collections.binarySearch(ll, new Integer(4)); > System.out.println(ll); > System.out.println("5 is in index " + index5); > System.out.println("8 is in index " + index8); > System.out.println("3 is in index " + index3); > System.out.println("4 is in index " + index4); > > } > > } > > Output is: > ------------------------------- > [5, 8, 3, 4] > 5 is in index 0 > 8 is in index 1 > 3 is in index -1 > 4 is in index -1 > > Instead of using the LinkedList, I have also tried it with ArrayList, > same result. > > Questions: why is 3 or 4 returns -1 in the index? Thx. You should sort the collection, that is the LinkedList, before applying binarySearch on it, because binarySearch operates on a sorted list, and adding multiple objects to a LinkedList does not preserve the natural order.
Just add: Collections.sort(ll); before the first line of int indexx = Collections.binarySearch(...); Then you should get the following output: [3, 4, 5, 8] 5 is in index 2 8 is in index 3 3 is in index 0 4 is in index 1 Michèle Garoche -- To post to this group, send email to javaprogrammingwithpassion@googlegroups.com To unsubscribe from this group, send email to javaprogrammingwithpassion+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/javaprogrammingwithpassion?hl=en