Collections Data Structure Java

public class ObjectInsertSort {
  private Person[] a;
  private int nElems;
  public ObjectInsertSort(int max) {
    a = new Person[max];
    nElems = 0;
  }
  // put person into array
  public void insert(String last, String first, int age) {
    a[nElems] = new Person(last, first, age);
    nElems++;
  }
  public void display() {
    for (int j = 0; j < nElems; j++)
      a[j].displayPerson();
  }
  public void insertionSort() {
    int in, out;
    for (out = 1; out < nElems; out++) {
      Person temp = a[out]; // out is dividing line
      in = out; // start shifting at out
      while (in > 0 && // until smaller one found,
          a[in - 1].getLast().compareTo(temp.getLast()) > 0) {
        a[in] = a[in - 1]; // shift item to the right
        --in; // go left one position
      }
      a[in] = temp; // insert marked item
    }
  }
  public static void main(String[] args) {
    int maxSize = 100; // array size
    ObjectInsertSort arr;
    arr = new ObjectInsertSort(maxSize); // create the array
    arr.insert("Jo", "Yin", 24);
    arr.insert("Pengzhou", "Yin", 59);
    arr.insert("James", "Chen", 37);
    arr.insert("Chirs", "Paul", 37);
    arr.insert("Rob", "Tom", 43);
    arr.insert("Carlo", "Sato", 21);
    arr.insert("Al", "Henry", 29);
    arr.insert("Nancy", "Jose", 72);
    arr.insert("Vang", "Minh", 22);
    System.out.println("Before sorting:");
    arr.display(); // display items
    arr.insertionSort(); // insertion-sort them
    System.out.println("After sorting:");
    arr.display(); // display them again
  }
}
class Person {
  private String lastName;
  private String firstName;
  private int age;
  public Person(String last, String first, int a) {
    lastName = last;
    firstName = first;
    age = a;
  }
  public void displayPerson() {
    System.out.print("   Last name: " + lastName);
    System.out.print(", First name: " + firstName);
    System.out.println(", Age: " + age);
  }
  public String getLast() {
    return lastName;
  }
}