interface MyComparable { public int compareTo(Object o); } class Auxiliaries { public static MyComparable findMax( MyComparable [] arr) { int maxIndex = 0; for (int i = 1; i < arr.length; i++) { if( arr[i].compareTo( arr[ maxIndex ] ) > 0) maxIndex = i; } return arr[ maxIndex ]; } } class MyFindMax { public static void main( String [] args) { IntHolder [] arr1 = { new IntHolder(11), new IntHolder(21), new IntHolder(17), new IntHolder(34) }; IntHolder ih = (IntHolder) Auxiliaries.findMax ( arr1); System.out.println(ih.i); Rectangl [] arr2 = {new Rectangl(5, 2), new Rectangl(5, 3), new Rectangl(6, 4), new Rectangl(6, 2)}; Rectangl rect = (Rectangl) Auxiliaries.findMax(arr2); System.out.println(rect.length + ", " + rect.breadth); } } class IntHolder implements MyComparable { int i; public IntHolder (int i1) { i = i1; } public int compareTo(Object o) { IntHolder holder = (IntHolder) o; if (i > holder.i) return 1; if (i == holder.i) return 0; if (i < holder.i) return -1; return 0; } } class Rectangl implements MyComparable { int length, breadth; public Rectangl (int l, int b) { length = l; breadth = b; } public int compareTo(Object o) { Rectangl rect = (Rectangl) o; if ( length * breadth > rect.length * rect.breadth ) return 1; if ( length * breadth == rect.length * rect.breadth ) return 0; if ( length * breadth < rect.length * rect.breadth ) return -1; return 0; } }