package javacodebook.collections.collection.search;

import java.util.*;

public class SearchExamples {

    public static void main(String[] args) {
        ArrayList list = new ArrayList();

        //Ein Array mit 1000 aufsteigenden Zahlen wird erzeugt
        for(int i = 0; i < 1000; i++)
            list.add(new Integer(i));

        //Einfache Suche nach dem richtigen Zahlenwert
        int pos = Collections.binarySearch(list, new Integer(327));
        System.out.println("Position " + pos);//große Überraschung ist das nicht
        list.clear();

        //Jetzt werden Strings mit einem Zahlenwert ergänzt
        for(int i = 0; i < 1000; i++)
            list.add("Nummer" + i);

        //Ein spezieller Comparator sorgt dafür, dass nur die Zahlenwerte
        //verglichen werden
        Comparator numberComparator = new Comparator() {

            //die Compare-Methode schneidet vom in der Liste vorhandenen String
            //jeweils den vorderen Teil mit dem String ab, so dass nur die
            //Zahl übrig bleibt
            public int compare(Object o1, Object o2) {
                String s = (String)o1;
                Integer intValue = new Integer(s.substring(6, s.length()));
                return intValue.compareTo((Integer)o2);
            }
            //die equals-Methode ist für die Suche unwichtig
            public boolean equals(Object o1, Object o2) {
                return o1.equals(o2);
            }
        };

        //Auch jetzt wird wieder nach einer Zahl gesucht, allerdings diesmal in
        //einer Liste mit String-Werten, und mit einem geeigneten Comparator
        pos = Collections.binarySearch(list, new Integer(327), numberComparator);
        System.out.println("Position " + pos);
    }
}
