Class SnapshotArray<T>

  • All Implemented Interfaces:
    java.lang.Iterable<T>

    public class SnapshotArray<T>
    extends Array<T>
    An array that allows modification during iteration. Guarantees that array entries provided by begin() between indexes 0 and Array.size at the time begin was called will not be modified until end() is called. If modification of the SnapshotArray occurs between begin/end, the backing array is copied prior to the modification, ensuring that the backing array that was returned by begin() is unaffected. To avoid allocation, an attempt is made to reuse any extra array created as a result of this copy on subsequent copies.

    Note that SnapshotArray is not for thread safety, only for modification during iteration.

    It is suggested iteration be done in this specific way:

     SnapshotArray array = new SnapshotArray();
     // ...
     Object[] items = array.begin();
     for (int i = 0, n = array.size; i < n; i++) {
            Item item = (Item)items[i];
            // ...
     }
     array.end();
     
    • Constructor Detail

      • SnapshotArray

        public SnapshotArray()
      • SnapshotArray

        public SnapshotArray​(Array array)
      • SnapshotArray

        public SnapshotArray​(boolean ordered,
                             int capacity,
                             java.lang.Class arrayType)
      • SnapshotArray

        public SnapshotArray​(boolean ordered,
                             int capacity)
      • SnapshotArray

        public SnapshotArray​(boolean ordered,
                             T[] array,
                             int startIndex,
                             int count)
      • SnapshotArray

        public SnapshotArray​(java.lang.Class arrayType)
      • SnapshotArray

        public SnapshotArray​(int capacity)
      • SnapshotArray

        public SnapshotArray​(T[] array)
    • Method Detail

      • begin

        public T[] begin()
        Returns the backing array, which is guaranteed to not be modified before end().
      • end

        public void end()
        Releases the guarantee that the array returned by begin() won't be modified.
      • set

        public void set​(int index,
                        T value)
        Overrides:
        set in class Array<T>
      • insert

        public void insert​(int index,
                           T value)
        Overrides:
        insert in class Array<T>
      • insertRange

        public void insertRange​(int index,
                                int count)
        Description copied from class: Array
        Inserts the specified number of items at the specified index. The new items will have values equal to the values at those indices before the insertion.
        Overrides:
        insertRange in class Array<T>
      • swap

        public void swap​(int first,
                         int second)
        Overrides:
        swap in class Array<T>
      • removeValue

        public boolean removeValue​(T value,
                                   boolean identity)
        Description copied from class: Array
        Removes the first instance of the specified value in the array.
        Overrides:
        removeValue in class Array<T>
        Parameters:
        value - May be null.
        identity - If true, == comparison will be used. If false, .equals() comparison will be used.
        Returns:
        true if value was found and removed, false otherwise
      • removeIndex

        public T removeIndex​(int index)
        Description copied from class: Array
        Removes and returns the item at the specified index.
        Overrides:
        removeIndex in class Array<T>
      • removeRange

        public void removeRange​(int start,
                                int end)
        Description copied from class: Array
        Removes the items between the specified indices, inclusive.
        Overrides:
        removeRange in class Array<T>
      • removeAll

        public boolean removeAll​(Array<? extends T> array,
                                 boolean identity)
        Description copied from class: Array
        Removes from this array all of elements contained in the specified array.
        Overrides:
        removeAll in class Array<T>
        identity - True to use ==, false to use .equals().
        Returns:
        true if this array was modified.
      • pop

        public T pop()
        Description copied from class: Array
        Removes and returns the last item.
        Overrides:
        pop in class Array<T>
      • clear

        public void clear()
        Overrides:
        clear in class Array<T>
      • sort

        public void sort()
        Description copied from class: Array
        Sorts this array. The array elements must implement Comparable. This method is not thread safe (uses Sort.instance()).
        Overrides:
        sort in class Array<T>
      • sort

        public void sort​(java.util.Comparator<? super T> comparator)
        Description copied from class: Array
        Sorts the array. This method is not thread safe (uses Sort.instance()).
        Overrides:
        sort in class Array<T>
      • reverse

        public void reverse()
        Overrides:
        reverse in class Array<T>
      • shuffle

        public void shuffle()
        Overrides:
        shuffle in class Array<T>
      • truncate

        public void truncate​(int newSize)
        Description copied from class: Array
        Reduces the size of the array to the specified size. If the array is already smaller than the specified size, no action is taken.
        Overrides:
        truncate in class Array<T>
      • setSize

        public T[] setSize​(int newSize)
        Description copied from class: Array
        Sets the array size, leaving any values beyond the current size null.
        Overrides:
        setSize in class Array<T>
        Returns:
        Array.items