Collections Java Tutorial

import java.util.Comparator;
public class AnimationTester {
  public static void main(String[] args) {
    Integer[] values = new Integer[]{1,2,7,3,5};
    Comparator comp = new Comparator() {
      public int compare(Integer d1, Integer d2) {
        return d1.compareTo(d2);
      }
    };
    MergeSorter.sort(values, comp);
    for (int i = 0; i < values.length; i++){
      System.out.print(values[i]+" ");
    }
    
  }
}
class MergeSorter {
  public static  void sort(E[] a, Comparator comp) {
    mergeSort(a, 0, a.length - 1, comp);
  }
  private static  void mergeSort(E[] a, int from, int to, Comparator comp) {
    if (from == to)
      return;
    int mid = (from + to) / 2;
    // Sort the first and the second half
    mergeSort(a, from, mid, comp);
    mergeSort(a, mid + 1, to, comp);
    merge(a, from, mid, to, comp);
  }
  private static  void merge(E[] a, int from, int mid, int to, Comparator comp) {
    int n = to - from + 1;
    Object[] values = new Object[n];
    int fromValue = from;
    int middleValue = mid + 1;
    int index = 0;
    while (fromValue <= mid && middleValue <= to) {
      if (comp.compare(a[fromValue], a[middleValue]) < 0) {
        values[index] = a[fromValue];
        fromValue++;
      } else {
        values[index] = a[middleValue];
        middleValue++;
      }
      index++;
    }
    while (fromValue <= mid) {
      values[index] = a[fromValue];
      fromValue++;
      index++;
    }
    while (middleValue <= to) {
      values[index] = a[middleValue];
      middleValue++;
      index++;
    }
    for (index = 0; index < n; index++)
      a[from + index] = (E) values[index];
  }
}