List binary search

In this chapter you will learn:

  1. How to do binary search on a List
  2. How to use the not-in index value returned from binary search to insert value

Sort a list

We can do binary search on an ordered list with the following methods.

  • static<T> int binarySearch(List<? extends Comparable<? super T>> list, T key)
    Searches list for an object using the binary search algorithm.
  • static<T> int binarySearch(List<? extends T> list, T key, Comparator<? super T> c)
    Searches list for an object using the binary search algorithm and passed in comparator.
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
/* j a  v  a  2s  . c o m*/
public class Main {

  public static void main(String args[]) {
    List<Character> ll = new LinkedList<Character>();

    for (char n = 'A'; n <= 'Z'; n++)
      ll.add(n);

    Collections.shuffle(ll);

    for (Character x : ll)
      System.out.print(x + " ");
    Collections.sort(ll);

    for (Character x : ll)
      System.out.print(x + " ");

    System.out.println("Searching for F.");
    int i = Collections.binarySearch(ll, 'F');

    if (i >= 0) {
      System.out.println("Found at index " + i);
      System.out.println("Object is " + ll.get(i));
    }
  }
}

The code above generates the following result.

Search value not in the List

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
//from  j  a  v a  2 s. com
public class MainClass {
  public static void main(String args[]) {
    String simpsons[] = { "B", "H", "L", "M", "H", "M", "R" };

    List list = new ArrayList(Arrays.asList(simpsons));

    // Ensure list sorted
    Collections.sort(list);
    System.out.println("Sorted list: [length: " + list.size() + "]");
    System.out.println(list);

    // Search for element in list
    int index = Collections.binarySearch(list, "M");
    System.out.println("Found M @ " + index);

    // Search for element not in list
    index = Collections.binarySearch(list, "J");
    System.out.println("Didn't find J @ " + index);

  }
}

The output:

The -4 is returned from the binary search when searching J since J is not in the list. -4 is negative and negative indicates that the value is missing. The absolute value of -4 tells where should we insert and can still keep the list ordered.

Next chapter...

What you will learn in the next chapter:

  1. What is Map interface
  2. How to get the size of a map
Home » Java Tutorial » List

List

    List interface
    List add/insert elements
    List clear/remove elements
    List search
    List element get and set
    List and its Iterator
    List size, empty
    List conversion, to array
    List to sublist
    List comparison
    List filling
    List reversing
    List rotating and shuffling
    List sorting
    List element swap
    List element replacing
    List copy
    List binary search

ArrayList

    ArrayList
    ArrayList Creation
    ArrayList add/insert
    ArrayList get/set element
    ArrayList clear/remove
    ArrayList search
    ArrayList copy and shallow copy
    ArrayList size, trim to size and capacity
    ArrayList to array

LinkedList

    LinkedList class
    LinkedList creation
    LinkedList add/insert elements
    LinkedList get elements
    LinkedList search
    LinkeList replace/set elements
    LinkedList remove element
    LinkedList copy
    LinkedList iterator
    LinkedList peek element
    LinkedList pop/push element
    LinkedList conversion

List Utilities

    List filling
    List reversing
    List rotating and shuffling
    List sorting
    List element swap
    List element replacing
    List copy
    List binary search