"mirror" elements in a list Write a method mirror that doubles the size of a list of integers by
  appending the mirror image of the original sequence to the end of the
  list. The mirror image is the same sequence of values in reverse
  order. For example, if a variable called list stores this sequence of
  values:
  
  [1, 3, 2, 7] 
  
  and we make the following call:
  
  list.mirror(); 
  
  then it should store the following values after the
  call:
  
  [1, 3, 2, 7, 7, 2, 3, 1] 
  
  Notice that it has been doubled in size by
  having the original sequence appearing in reverse order at the end of
  the list. You may not make assumptions about how many elements are in
  the list. Because adding these elements might overrun the capacity of
  the underlying array, you may need to call ensureCapacity to enlarge
  this array.
  
  Assume you are adding to the ArrayIntList class with following fields:

public class ArrayIntList {
    private int[] elementData;
    private int size;

    public void add(int value) { ... }
    public void add(int index, int value) { ... }
    public void ensureCapacity(int capacity) { ... }
    ...

    // your code goes here
}



What improvements can I make to help on my future coding? Interested in knowing if there are other ways to tackle this question, and if the way I solved the problem is safe? This code interacts with the ArrayIntList.java class.

public void mirror() {
    if (size != 0) {
        int limit = size * 2;
        this.ensureCapacity(limit);
        size = limit;
        for (int i = 0; i &lt; size; i++) {
           elementData[(limit - 1) - i] = elementData[i];
        }
    }
}
This is good code, because it does what it says on the tin. I do have two remarks:

The this. in this.ensureCapacity(limit) isn't necessary. Some people swear by adding it anyway, so it's a matter of style.

The other remark is that you loop over twice as many elements as needed because you set size to limit before looping. You can hold off until after:

public void mirror() {
    if (size != 0) {
        int limit = size * 2;
        this.ensureCapacity(limit);
        //size = limit; // [!] moved to below &gt;&gt;&gt;
        for (int i = 0; i &lt; size; i++) {
           elementData[(limit - 1) - i] = elementData[i];
        }
        size = limit; // [!] &lt;&lt;&lt; moved from above
    }
}


That's all. Good code.