Returns an unmodifiable view of the union of two sets. The returned set contains all elements that are contained in either backing set. Iterating over the returned set iterates first over all the elements of set1, then over each element of set2, in order, that is not contained
(
final Set<? extends E> set1, final Set<? extends E> set2)
| 629 | |
| 630 | |
| 631 | public static <E> SetView<E> union( |
| 632 | final Set<? extends E> set1, final Set<? extends E> set2) { |
| 633 | checkNotNull(set1, "set1"); |
| 634 | checkNotNull(set2, "set2"); |
| 635 | final Set<? extends E> set2minus1 = difference(set2, set1); |
| 636 | return new SetView<E>() { |
| 637 | @Override |
| 638 | public int size() { |
| 639 | return IntMath.saturatedAdd(set1.size(), set2minus1.size()); |
| 640 | } |
| 641 | |
| 642 | @Override |
| 643 | public boolean isEmpty() { |
| 644 | return set1.isEmpty() && set2.isEmpty(); |
| 645 | } |
| 646 | |
| 647 | @Override |
| 648 | public Iterator<E> iterator() { |
| 649 | return Iterators.unmodifiableIterator(Iterators.concat(set1.iterator(), set2minus1.iterator())); |
| 650 | } |
| 651 | |
| 652 | @Override |
| 653 | public boolean contains(Object object) { |
| 654 | return set1.contains(object) || set2.contains(object); |
| 655 | } |
| 656 | |
| 657 | @Override |
| 658 | public <S extends Set<E>> S copyInto(S set) { |
| 659 | set.addAll(set1); |
| 660 | set.addAll(set2); |
| 661 | return set; |
| 662 | } |
| 663 | |
| 664 | @Override |
| 665 | public ImmutableSet<E> immutableCopy() { |
| 666 | return new ImmutableSet.Builder<E>().addAll(set1).addAll(set2).build(); |
| 667 | } |
| 668 | }; |
| 669 | } |
| 670 | |
| 671 | /** |
| 672 | * Returns an unmodifiable <b>view</b> of the intersection of two sets. The |
no test coverage detected