@Override
    public Overlay remove(final int pIndex) {
        return mOverlayList.remove(pIndex);
    }
@Test
    public void testIntegerReversed() {
        ListTest<Integer> list;
        final ListTester<Integer> tester = new ListTester<>();

        // best version ever
        list = new ListTest<>();
        tester.test(list);

        // synchronized version: slower, and not bullet-proof in the real world
        list = new ListTest<Integer>() {
            @Override
            public void remove() {
                synchronized (mList) {
                    super.remove();
                }
            }

            @Override
            public ListIterator<Integer> reverseIterator() {
                synchronized (mList) {
                    return unprotectedReverseListIterator();
                }
            }
        };
        tester.test(list);

        // half synchronized version: prone to crash because the item removal is not synchronized
        list = new ListTest<Integer>() {
            @Override
            public ListIterator<Integer> reverseIterator() {
                synchronized (mList) {
                    return unprotectedReverseListIterator();
                }
            }
        };
        //tester.test(list); // don't run this, it would crash!
    }