10 |
|
import java.util.Set; |
11 |
|
import java.util.AbstractSet; |
12 |
|
import java.util.Iterator; |
13 |
– |
import java.util.stream.Stream; |
13 |
|
import java.util.Spliterator; |
14 |
|
import java.util.Spliterators; |
15 |
+ |
import java.util.function.Predicate; |
16 |
+ |
import java.util.function.Consumer; |
17 |
|
|
18 |
|
/** |
19 |
|
* A {@link java.util.Set} that uses an internal {@link CopyOnWriteArrayList} |
86 |
|
* @throws NullPointerException if the specified collection is null |
87 |
|
*/ |
88 |
|
public CopyOnWriteArraySet(Collection<? extends E> c) { |
89 |
< |
al = new CopyOnWriteArrayList<E>(); |
90 |
< |
al.addAllAbsent(c); |
89 |
> |
if (c.getClass() == CopyOnWriteArraySet.class) { |
90 |
> |
@SuppressWarnings("unchecked") CopyOnWriteArraySet<E> cc = |
91 |
> |
(CopyOnWriteArraySet<E>)c; |
92 |
> |
al = new CopyOnWriteArrayList<E>(cc.al); |
93 |
> |
} |
94 |
> |
else { |
95 |
> |
al = new CopyOnWriteArrayList<E>(); |
96 |
> |
al.addAllAbsent(c); |
97 |
> |
} |
98 |
|
} |
99 |
|
|
100 |
|
/** |
368 |
|
return k == len; |
369 |
|
} |
370 |
|
|
371 |
+ |
public boolean removeIf(Predicate<? super E> filter) { |
372 |
+ |
return al.removeIf(filter); |
373 |
+ |
} |
374 |
+ |
|
375 |
+ |
public void forEach(Consumer<? super E> action) { |
376 |
+ |
al.forEach(action); |
377 |
+ |
} |
378 |
+ |
|
379 |
|
public Spliterator<E> spliterator() { |
380 |
|
return Spliterators.spliterator |
381 |
|
(al.getArray(), Spliterator.IMMUTABLE | |