@Override
        public void remove() {
            // This operation is not so easy to do, but we will fake it.
            // The issue is that the backing list could be completely
            // different from the one this iterator is a snapshot of.
            // We'll just remove(element) which in most cases will be
            // correct.  If the list had earlier .equals() equivalent
            // elements then we'll remove one of those instead.  Either
            // way, none of those changes are reflected in this iterator.
            SafeArrayList.this.remove(array[lastReturned]);
        }
Returns a current snapshot of this List's backing array that
 is guaranteed not to change through further List manipulation.
 Changes to this array may or may not be reflected in the list and
 should be avoided.

@return either the pre-existing array or a new one
jme3-core/src/main/java/com/jme3/util/SafeArrayList.java