code: public static <E> SetView<E> symmetricDifference(
        Set<? extends E> set1, Set<? extends E> set2) {
      checkNotNull(set1, "set1");
      checkNotNull(set2, "set2");
  
      // TODO(kevinb): Replace this with a more efficient implementation
      return difference(union(set1, set2), intersection(set1, set2));
    }
docs: Returns an unmodifiable <b>view</b> of the symmetric difference of two
  sets. The returned set contains all elements that are contained in either
  {@code set1} or {@code set2} but not in both. The iteration order of the
  returned set is undefined.
  
  <p>Results are undefined if {@code set1} and {@code set2} are sets based
  on different equivalence relations (as {@code HashSet}, {@code TreeSet},
  and the keySet of an {@code IdentityHashMap} all are).
  
  @since 3.0