8014824: Document Spliterator characteristics and binding policy of java util collection impls
Reviewed-by: chegar
This commit is contained in:
parent
5d38b44a3e
commit
7647c6e6a1
@ -888,6 +888,19 @@ public class ArrayDeque<E> extends AbstractCollection<E>
|
||||
elements[i] = s.readObject();
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a <em><a href="Spliterator.html#binding">late-binding</a></em>
|
||||
* and <em>fail-fast</em> {@link Spliterator} over the elements in this
|
||||
* deque.
|
||||
*
|
||||
* <p>The {@code Spliterator} reports {@link Spliterator#SIZED},
|
||||
* {@link Spliterator#SUBSIZED}, {@link Spliterator#ORDERED}, and
|
||||
* {@link Spliterator#NONNULL}. Overriding implementations should document
|
||||
* the reporting of additional characteristic values.
|
||||
*
|
||||
* @return a {@code Spliterator} over the elements in this deque
|
||||
* @since 1.8
|
||||
*/
|
||||
public Spliterator<E> spliterator() {
|
||||
return new DeqSpliterator<E>(this, -1, -1);
|
||||
}
|
||||
|
@ -1238,6 +1238,20 @@ public class ArrayList<E> extends AbstractList<E>
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a <em><a href="Spliterator.html#binding">late-binding</a></em>
|
||||
* and <em>fail-fast</em> {@link Spliterator} over the elements in this
|
||||
* list.
|
||||
*
|
||||
* <p>The {@code Spliterator} reports {@link Spliterator#SIZED},
|
||||
* {@link Spliterator#SUBSIZED}, and {@link Spliterator#ORDERED}.
|
||||
* Overriding implementations should document the reporting of additional
|
||||
* characteristic values.
|
||||
*
|
||||
* @return a {@code Spliterator} over the elements in this list
|
||||
* @since 1.8
|
||||
*/
|
||||
@Override
|
||||
public Spliterator<E> spliterator() {
|
||||
return new ArrayListSpliterator<>(this, 0, -1, 0);
|
||||
}
|
||||
|
@ -312,6 +312,18 @@ public class HashSet<E>
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a <em><a href="Spliterator.html#binding">late-binding</a></em>
|
||||
* and <em>fail-fast</em> {@link Spliterator} over the elements in this
|
||||
* set.
|
||||
*
|
||||
* <p>The {@code Spliterator} reports {@link Spliterator#SIZED} and
|
||||
* {@link Spliterator#DISTINCT}. Overriding implementations should document
|
||||
* the reporting of additional characteristic values.
|
||||
*
|
||||
* @return a {@code Spliterator} over the elements in this set
|
||||
* @since 1.8
|
||||
*/
|
||||
public Spliterator<E> spliterator() {
|
||||
return new HashMap.KeySpliterator<E,Object>(map, 0, -1, 0, 0);
|
||||
}
|
||||
|
@ -129,10 +129,20 @@ import java.util.function.BiFunction;
|
||||
* exception for its correctness: <i>the fail-fast behavior of iterators
|
||||
* should be used only to detect bugs.</i>
|
||||
*
|
||||
* <p>The spliterators returned by the spliterator method of the collections
|
||||
* returned by all of this class's collection view methods are
|
||||
* <em><a href="Spliterator.html#binding">late-binding</a></em>,
|
||||
* <em>fail-fast</em>, and additionally report {@link Spliterator#ORDERED}.
|
||||
*
|
||||
* <p>This class is a member of the
|
||||
* <a href="{@docRoot}/../technotes/guides/collections/index.html">
|
||||
* Java Collections Framework</a>.
|
||||
*
|
||||
* @implNote
|
||||
* The spliterators returned by the spliterator method of the collections
|
||||
* returned by all of this class's collection view methods are created from
|
||||
* the iterators of the corresponding collections.
|
||||
*
|
||||
* @param <K> the type of keys maintained by this map
|
||||
* @param <V> the type of mapped values
|
||||
*
|
||||
|
@ -170,13 +170,23 @@ public class LinkedHashSet<E>
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a {@code Spliterator}, over the elements in this set, that
|
||||
* reports {@code SIZED}, {@code DISTINCT} and {@code ORDERED}.
|
||||
* Overriding implementations are expected to document if the
|
||||
* {@code Spliterator} reports any additional and relevant characteristic
|
||||
* values.
|
||||
* Creates a <em><a href="Spliterator.html#binding">late-binding</a></em>
|
||||
* and <em>fail-fast</em> {@code Spliterator} over the elements in this set.
|
||||
*
|
||||
* <p>The {@code Spliterator} reports {@link Spliterator#SIZED},
|
||||
* {@link Spliterator#DISTINCT}, and {@code ORDERED}. Implementations
|
||||
* should document the reporting of additional characteristic values.
|
||||
*
|
||||
* @implNote
|
||||
* The implementation creates a
|
||||
* <em><a href="Spliterator.html#binding">late-binding</a></em> spliterator
|
||||
* from the set's {@code Iterator}. The spliterator inherits the
|
||||
* <em>fail-fast</em> properties of the set's iterator.
|
||||
* The created {@code Spliterator} additionally reports
|
||||
* {@link Spliterator#SUBSIZED}.
|
||||
*
|
||||
* @return a {@code Spliterator} over the elements in this set
|
||||
* @since 1.8
|
||||
*/
|
||||
@Override
|
||||
public Spliterator<E> spliterator() {
|
||||
|
@ -1149,6 +1149,23 @@ public class LinkedList<E>
|
||||
linkLast((E)s.readObject());
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a <em><a href="Spliterator.html#binding">late-binding</a></em>
|
||||
* and <em>fail-fast</em> {@link Spliterator} over the elements in this
|
||||
* list.
|
||||
*
|
||||
* <p>The {@code Spliterator} reports {@link Spliterator#SIZED} and
|
||||
* {@link Spliterator#ORDERED}. Overriding implementations should document
|
||||
* the reporting of additional characteristic values.
|
||||
*
|
||||
* @implNote
|
||||
* The {@code Spliterator} additionally reports {@link Spliterator#SUBSIZED}
|
||||
* and implements {@code trySplit} to permit limited parallelism..
|
||||
*
|
||||
* @return a {@code Spliterator} over the elements in this list
|
||||
* @since 1.8
|
||||
*/
|
||||
@Override
|
||||
public Spliterator<E> spliterator() {
|
||||
return new LLSpliterator<E>(this, -1, 0);
|
||||
}
|
||||
|
@ -671,7 +671,7 @@ public interface List<E> extends Collection<E> {
|
||||
* The default implementation creates a
|
||||
* <em><a href="Spliterator.html#binding">late-binding</a></em> spliterator
|
||||
* from the list's {@code Iterator}. The spliterator inherits the
|
||||
* <em>fail-fast</em> properties of the collection's iterator.
|
||||
* <em>fail-fast</em> properties of the list's iterator.
|
||||
*
|
||||
* @implNote
|
||||
* The created {@code Spliterator} additionally reports
|
||||
|
@ -795,6 +795,19 @@ public class PriorityQueue<E> extends AbstractQueue<E>
|
||||
heapify();
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a <em><a href="Spliterator.html#binding">late-binding</a></em>
|
||||
* and <em>fail-fast</em> {@link Spliterator} over the elements in this
|
||||
* queue.
|
||||
*
|
||||
* <p>The {@code Spliterator} reports {@link Spliterator#SIZED},
|
||||
* {@link Spliterator#SUBSIZED}, and {@link Spliterator#NONNULL}.
|
||||
* Overriding implementations should document the reporting of additional
|
||||
* characteristic values.
|
||||
*
|
||||
* @return a {@code Spliterator} over the elements in this queue
|
||||
* @since 1.8
|
||||
*/
|
||||
public final Spliterator<E> spliterator() {
|
||||
return new PriorityQueueSpliterator<E>(this, 0, -1, 0);
|
||||
}
|
||||
|
@ -394,7 +394,7 @@ public interface Set<E> extends Collection<E> {
|
||||
* The default implementation creates a
|
||||
* <em><a href="Spliterator.html#binding">late-binding</a></em> spliterator
|
||||
* from the set's {@code Iterator}. The spliterator inherits the
|
||||
* <em>fail-fast</em> properties of the collection's iterator.
|
||||
* <em>fail-fast</em> properties of the set's iterator.
|
||||
*
|
||||
* @implNote
|
||||
* The created {@code Spliterator} additionally reports
|
||||
|
@ -238,7 +238,7 @@ public interface SortedSet<E> extends Set<E> {
|
||||
* The default implementation creates a
|
||||
* <em><a href="Spliterator.html#binding">late-binding</a></em> spliterator
|
||||
* from the sorted set's {@code Iterator}. The spliterator inherits the
|
||||
* <em>fail-fast</em> properties of the collection's iterator. The
|
||||
* <em>fail-fast</em> properties of the set's iterator. The
|
||||
* spliterator's comparator is the same as the sorted set's comparator.
|
||||
*
|
||||
* @implNote
|
||||
|
@ -74,7 +74,11 @@ import java.util.function.LongConsumer;
|
||||
* source prior to binding are reflected when the Spliterator is traversed.
|
||||
* After binding a Spliterator should, on a best-effort basis, throw
|
||||
* {@link ConcurrentModificationException} if structural interference is
|
||||
* detected. Spliterators that do this are called <em>fail-fast</em>.
|
||||
* detected. Spliterators that do this are called <em>fail-fast</em>. The
|
||||
* bulk traversal method ({@link #forEachRemaining forEachRemaining()}) of a
|
||||
* Spliterator may optimize traversal and check for structural interference
|
||||
* after all elements have been traversed, rather than checking per-element and
|
||||
* failing immediately.
|
||||
*
|
||||
* <p>Spliterators can provide an estimate of the number of remaining elements
|
||||
* via the {@link #estimateSize} method. Ideally, as reflected in characteristic
|
||||
|
@ -790,8 +790,19 @@ public class TreeMap<K,V>
|
||||
|
||||
/**
|
||||
* Returns a {@link Set} view of the keys contained in this map.
|
||||
* The set's iterator returns the keys in ascending order.
|
||||
* The set is backed by the map, so changes to the map are
|
||||
*
|
||||
* <p>The set's iterator returns the keys in ascending order.
|
||||
* The set's spliterator is
|
||||
* <em><a href="Spliterator.html#binding">late-binding</a></em>,
|
||||
* <em>fail-fast</em>, and additionally reports {@link Spliterator#SORTED}
|
||||
* and {@link Spliterator#ORDERED} with an encounter order that is ascending
|
||||
* key order. The spliterator's comparator (see
|
||||
* {@link java.util.Spliterator#getComparator()}) is {@code null} if
|
||||
* the tree map's comparator (see {@link #comparator()}) is {@code null}.
|
||||
* Otherwise, the spliterator's comparator is the same as or imposes the
|
||||
* same total ordering as the tree map's comparator.
|
||||
*
|
||||
* <p>The set is backed by the map, so changes to the map are
|
||||
* reflected in the set, and vice-versa. If the map is modified
|
||||
* while an iteration over the set is in progress (except through
|
||||
* the iterator's own {@code remove} operation), the results of
|
||||
@ -823,9 +834,15 @@ public class TreeMap<K,V>
|
||||
|
||||
/**
|
||||
* Returns a {@link Collection} view of the values contained in this map.
|
||||
* The collection's iterator returns the values in ascending order
|
||||
* of the corresponding keys.
|
||||
* The collection is backed by the map, so changes to the map are
|
||||
*
|
||||
* <p>The collection's iterator returns the values in ascending order
|
||||
* of the corresponding keys. The collection's spliterator is
|
||||
* <em><a href="Spliterator.html#binding">late-binding</a></em>,
|
||||
* <em>fail-fast</em>, and additionally reports {@link Spliterator#ORDERED}
|
||||
* with an encounter order that is ascending order of the corresponding
|
||||
* keys.
|
||||
*
|
||||
* <p>The collection is backed by the map, so changes to the map are
|
||||
* reflected in the collection, and vice-versa. If the map is
|
||||
* modified while an iteration over the collection is in progress
|
||||
* (except through the iterator's own {@code remove} operation),
|
||||
@ -843,8 +860,15 @@ public class TreeMap<K,V>
|
||||
|
||||
/**
|
||||
* Returns a {@link Set} view of the mappings contained in this map.
|
||||
* The set's iterator returns the entries in ascending key order.
|
||||
* The set is backed by the map, so changes to the map are
|
||||
*
|
||||
* <p>The set's iterator returns the entries in ascending key order. The
|
||||
* sets's spliterator is
|
||||
* <em><a href="Spliterator.html#binding">late-binding</a></em>,
|
||||
* <em>fail-fast</em>, and additionally reports {@link Spliterator#SORTED} and
|
||||
* {@link Spliterator#ORDERED} with an encounter order that is ascending key
|
||||
* order.
|
||||
*
|
||||
* <p>The set is backed by the map, so changes to the map are
|
||||
* reflected in the set, and vice-versa. If the map is modified
|
||||
* while an iteration over the set is in progress (except through
|
||||
* the iterator's own {@code remove} operation, or through the
|
||||
|
@ -533,6 +533,25 @@ public class TreeSet<E> extends AbstractSet<E>
|
||||
tm.readTreeSet(size, s, PRESENT);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a <em><a href="Spliterator.html#binding">late-binding</a></em>
|
||||
* and <em>fail-fast</em> {@link Spliterator} over the elements in this
|
||||
* set.
|
||||
*
|
||||
* <p>The {@code Spliterator} reports {@link Spliterator#SIZED},
|
||||
* {@link Spliterator#DISTINCT}, {@link Spliterator#SORTED}, and
|
||||
* {@link Spliterator#ORDERED}. Overriding implementations should document
|
||||
* the reporting of additional characteristic values.
|
||||
*
|
||||
* <p>The spliterator's comparator (see
|
||||
* {@link java.util.Spliterator#getComparator()}) is {@code null} if
|
||||
* the tree set's comparator (see {@link #comparator()}) is {@code null}.
|
||||
* Otherwise, the spliterator's comparator is the same as or imposes the
|
||||
* same total ordering as the tree set's comparator.
|
||||
*
|
||||
* @return a {@code Spliterator} over the elements in this set
|
||||
* @since 1.8
|
||||
*/
|
||||
public Spliterator<E> spliterator() {
|
||||
return TreeMap.keySpliteratorFor(m);
|
||||
}
|
||||
|
@ -1323,6 +1323,19 @@ public class Vector<E>
|
||||
modCount++;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a <em><a href="Spliterator.html#binding">late-binding</a></em>
|
||||
* and <em>fail-fast</em> {@link Spliterator} over the elements in this
|
||||
* list.
|
||||
*
|
||||
* <p>The {@code Spliterator} reports {@link Spliterator#SIZED},
|
||||
* {@link Spliterator#SUBSIZED}, and {@link Spliterator#ORDERED}.
|
||||
* Overriding implementations should document the reporting of additional
|
||||
* characteristic values.
|
||||
*
|
||||
* @return a {@code Spliterator} over the elements in this list
|
||||
* @since 1.8
|
||||
*/
|
||||
@Override
|
||||
public Spliterator<E> spliterator() {
|
||||
return new VectorSpliterator<>(this, null, 0, -1, 0);
|
||||
|
Loading…
x
Reference in New Issue
Block a user