@Override
    public T get(int index) {
        /* Check that the index is valid. */
        if (index < 0 || index >= size())
            throw new IndexOutOfBoundsException("Index " + index + ", size " + size());

        /* Now, there are two places we might need to look.  If index is
         * at or below the shadow point, we read from the old array.
         * Otherwise, read from the new array.  However, we have to be
         * careful, because the raw index is not the true index into the
         * structure because of the dummy element, so we bump the user
         * index by one first.
         */
        return (index + 1 <= mShadow) ? mOld[index + 1] : mNew[index + 1];
    }