package generics;
public class FindMaxDemo {

    public static void main(String[] args) {
        String[] st1 = { "Joe", "Bob", "Zeke", "Andy" };
        Double[] db = { 4.7, 2000.2, 78.5, 3.0, 5.0, 66.0, 123.456 };

        System.out.println(findMax(st1));
        System.out.println(findMax(db));
    }

    // Generic version
    public static <T extends Comparable<T>> T findMax2(T[] a) {
        int maxIndex = 0;
        for (int i = 1; i < a.length; i++) {
            if (a[i].compareTo(a[maxIndex]) > 0) {
                maxIndex = i;
            }
        }
        return a[maxIndex];
    }

    //Non-generic version
    public static Comparable findMax(Comparable[] a) {
        int maxIndex = 0;

        for (int i = 1; i < a.length; i++) {
            if (a[i].compareTo(a[maxIndex]) > 0) {
                maxIndex = i;
            }
        }

        return a[maxIndex];
    }

}
