import java.util.Comparator; class Person implements Comparable { public Person( String n, int a ) { name = n; age = a; } public int compareTo( Person rhs ) { return getName( ).compareTo( rhs.getName( ) ); } public String getName( ) { return name; } public int getAge( ) { return age; } public String toString( ) { return name + " " + age; } private String name; private int age; } class Student extends Person { public Student( String n, int a, double g ) { super( n, a ); gpa = g; } public double getGPA( ) { return gpa; } public String toString( ) { return super.toString( ) + " " + getGPA( ); } private double gpa; } class Employee extends Person { public Employee( String n, int a, double s ) { super( n, a ); salary = s; } public double getSalary( ) { return salary; } public String toString( ) { return super.toString( ) + " $" + getSalary( ); } private double salary; } class Jan18 { public static Person getOlder( Person p1, Person p2 ) { return p1.getAge( ) > p2.getAge( ) ? p1 : p2; } // arr.length > 0 public static Person getOldest( Person [ ] arr ) { int oldestIndex = 0; for( int i = 1; i < arr.length; i++ ) if( arr[ i ].getAge( ) > arr[ oldestIndex ].getAge( ) ) oldestIndex = i; return arr[ oldestIndex ]; } // arr.length > 0 /* public static int findMax( int [ ] arr ) { int maxIndex = 0; for( int i = 1; i < arr.length; i++ ) if( arr[ i ] > arr[ maxIndex ] ) maxIndex = i; return arr[ maxIndex ]; } */ // arr.length > 0 /* public static String findMax( String [ ] arr ) { int maxIndex = 0; for( int i = 1; i < arr.length; i++ ) if( arr[ i ].compareTo( arr[ maxIndex ] ) > 0 ) maxIndex = i; return arr[ maxIndex ]; } */ public static > AnyType findMax( AnyType [ ] arr ) { int maxIndex = 0; for( int i = 1; i < arr.length; i++ ) if( arr[ i ].compareTo( arr[ maxIndex ] ) > 0 ) maxIndex = i; return arr[ maxIndex ]; } public static AnyType findMax( AnyType [ ] arr, Comparator cmp ) { int maxIndex = 0; for( int i = 1; i < arr.length; i++ ) if( cmp.compare( arr[ i ], arr[ maxIndex ] ) > 0 ) maxIndex = i; return arr[ maxIndex ]; } public static void main( String [ ] args ) { Person p1 = new Person( "Joe", 36 ); Person p2 = new Person( "Jane", 35 ); Student s1 = new Student( "Bob", 35, 3.8 ); Student s2 = new Student( "Joan", 40, 3.6 ); Employee e1 = new Employee( "Alice", 50, 65000 ); // System.out.println( getOlder( p1, p2 ) ); // System.out.println( getOlder( s1, s2 ) ); // System.out.println( getOlder( s1, e1 ) ); Person [ ] arr1 = { p1, p2, s1, s2, e1 }; // System.out.println( getOldest( arr1 ) ); System.out.println( findMax( arr1 ) ); class CompareByAge implements Comparator { public int compare( Person lhs, Person rhs ) { return lhs.getAge( ) - rhs.getAge( ); } } System.out.println( findMax( arr1, new CompareByAge( ) ) ); Student [ ] arr2 = { s1, s2 }; Student max = findMax( arr2, new CompareByAge( ) ); System.out.println( max ); // int [ ] arr3 = { 4, 8, 1, 12, 5 }; Integer [ ] arr3 = { 4, 12, 8 }; System.out.println( findMax( arr3 ) ); String [ ] arr4 = { "hello", "world", "Zeke", "and" }; System.out.println( findMax( arr4 ) ); System.out.println( findMax( arr4, new CaseInsensitiveCompare( ) ) ); } } class CaseInsensitiveCompare implements Comparator { public int compare( String lhs, String rhs ) { return lhs.compareToIgnoreCase( rhs ); } }