--- old/src/java.base/share/classes/java/util/AbstractSet.java 2019-05-13 17:16:09.000000000 -0700 +++ new/src/java.base/share/classes/java/util/AbstractSet.java 2019-05-13 17:16:09.000000000 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2019, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -65,20 +65,27 @@ // Comparison and hashing + // FIXME: the first paragraph below is copied from Set.equals, because + // {@inheritDoc} inherits text from superclasses, not interfaces (see JDK-6376959). /** - * Compares the specified object with this set for equality. Returns - * {@code true} if the given object is also a set, the two sets have - * the same size, and every member of the given set is contained in - * this set. This ensures that the {@code equals} method works - * properly across different implementations of the {@code Set} - * interface.

+ * Compares the specified object with this set for equality. Returns + * {@code true} if the specified object is also a set, the two sets + * have the same size, and every member of the specified set is + * contained in this set. This operation uses the membership semantics + * of this set. This definition ensures that the {@code equals} method + * works properly across different implementations of the + * {@code Set} interface. * + * @implSpec * This implementation first checks if the specified object is this * set; if so it returns {@code true}. Then, it checks if the * specified object is a set whose size is identical to the size of - * this set; if not, it returns false. If so, it returns + * this set; if not, it returns {@code false}. If so, it returns * {@code containsAll((Collection) o)}. * + * @implNote + * {@inheritDoc} + * * @param o object to be compared for equality with this set * @return {@code true} if the specified object is equal to this set */ @@ -125,60 +132,4 @@ } return h; } - - /** - * Removes from this set all of its elements that are contained in the - * specified collection (optional operation). If the specified - * collection is also a set, this operation effectively modifies this - * set so that its value is the asymmetric set difference of - * the two sets. - * - *

This implementation determines which is the smaller of this set - * and the specified collection, by invoking the {@code size} - * method on each. If this set has fewer elements, then the - * implementation iterates over this set, checking each element - * returned by the iterator in turn to see if it is contained in - * the specified collection. If it is so contained, it is removed - * from this set with the iterator's {@code remove} method. If - * the specified collection has fewer elements, then the - * implementation iterates over the specified collection, removing - * from this set each element returned by the iterator, using this - * set's {@code remove} method. - * - *

Note that this implementation will throw an - * {@code UnsupportedOperationException} if the iterator returned by the - * {@code iterator} method does not implement the {@code remove} method. - * - * @param c collection containing elements to be removed from this set - * @return {@code true} if this set changed as a result of the call - * @throws UnsupportedOperationException if the {@code removeAll} operation - * is not supported by this set - * @throws ClassCastException if the class of an element of this set - * is incompatible with the specified collection - * (optional) - * @throws NullPointerException if this set contains a null element and the - * specified collection does not permit null elements - * (optional), - * or if the specified collection is null - * @see #remove(Object) - * @see #contains(Object) - */ - public boolean removeAll(Collection c) { - Objects.requireNonNull(c); - boolean modified = false; - - if (size() > c.size()) { - for (Object e : c) - modified |= remove(e); - } else { - for (Iterator i = iterator(); i.hasNext(); ) { - if (c.contains(i.next())) { - i.remove(); - modified = true; - } - } - } - return modified; - } - }