public class ArrayVector { private Object[] a; // Array storing the elements of the vector private int capacity = 16; // Length of array a private int size = 0; // Number of elements stored in the vector // Constructor public ArrayVector() { a = new Object[capacity]; } // O(1) time // Accessor methods public Object elemAtRank(int r) { return a[r]; } // O(1) time public int size() { return size; } public boolean isEmpty() { return size() == 0; } // O(1) time // Modifier methods public Object replaceAtRank(int r, Object e) { // O(1) time Object temp = a[r]; a[r] = e; return temp; } public Object removeAtRank(int r) { // O(n) time Object temp = a[r]; for (int i=r; i<size-1; i++) // Shift elements down a[i] = a[i+1]; size--; return temp; } public void insertAtRank(int r, Object e) { // O(n) time if (size == capacity) { // An overflow capacity *= 2; Object[] b = new Object[capacity]; for (int i=0; i<size; i++) b[i] = a[i]; a = b; } for (int i=size-1; i>=r; i--) // Shift elements up a[i+1] = a[i]; a[r] = e; size++; } }