View Javadoc
1   package org.djutils.immutablecollections;
2   
3   import java.util.Collection;
4   import java.util.LinkedHashSet;
5   import java.util.Set;
6   
7   /**
8    * An immutable wrapper for a LinkedHashSet.
9    * <p>
10   * Copyright (c) 2016-2021 Delft University of Technology, Jaffalaan 5, 2628 BX Delft, the Netherlands. All rights reserved. See
11   * for project information <a href="https://djutils.org" target="_blank"> https://djutils.org</a>. The DJUTILS project is
12   * distributed under a three-clause BSD-style license, which can be found at
13   * <a href="https://djutils.org/docs/license.html" target="_blank"> https://djutils.org/docs/license.html</a>.
14   * </p>
15   * $, initial version May 7, 2016 <br>
16   * @author <a href="https://www.tudelft.nl/averbraeck">Alexander Verbraeck</a>
17   * @author <a href="https://www.tudelft.nl/staff/p.knoppers/">Peter Knoppers</a>
18   * @param <E> the type of content of this Set
19   */
20  public class ImmutableLinkedHashSet<E> extends ImmutableAbstractSet<E>
21  {
22      /** */
23      private static final long serialVersionUID = 20160507L;
24  
25      /**
26       * @param collection Collection&lt;? extends E&gt;; the collection to use for the immutable set.
27       */
28      public ImmutableLinkedHashSet(final Collection<? extends E> collection)
29      {
30          super(new LinkedHashSet<E>(collection), Immutable.COPY);
31      }
32  
33      /**
34       * @param collection Set&lt;E&gt;; the collection to use for the immutable set.
35       * @param copyOrWrap COPY stores a safe, internal copy of the collection; WRAP stores a pointer to the original collection
36       */
37      public ImmutableLinkedHashSet(final Set<E> collection, final Immutable copyOrWrap)
38      {
39          super(copyOrWrap == Immutable.COPY ? new LinkedHashSet<E>(collection) : collection, copyOrWrap);
40      }
41  
42      /**
43       * @param collection ImmutableAbstractCollection&lt;? extends E&gt;; the collection to use for the immutable set.
44       */
45      public ImmutableLinkedHashSet(final ImmutableAbstractCollection<? extends E> collection)
46      {
47          super(new LinkedHashSet<E>(collection.getUnderlyingCollection()), Immutable.COPY);
48      }
49  
50      /**
51       * @param set ImmutableAbstractSet&lt;E&gt;; the collection to use for the immutable set.
52       * @param copyOrWrap COPY stores a safe, internal copy of the collection; WRAP stores a pointer to the original collection
53       */
54      public ImmutableLinkedHashSet(final ImmutableAbstractSet<E> set, final Immutable copyOrWrap)
55      {
56          super(copyOrWrap == Immutable.COPY ? new LinkedHashSet<E>(set.getUnderlyingCollection())
57                  : set.getUnderlyingCollection(), copyOrWrap);
58      }
59  
60      /** {@inheritDoc} */
61      @Override
62      protected Set<E> getUnderlyingCollection()
63      {
64          return super.getUnderlyingCollection();
65      }
66  
67      /** {@inheritDoc} */
68      @Override
69      public final Set<E> toSet()
70      {
71          return new LinkedHashSet<E>(getUnderlyingCollection());
72      }
73  
74      /** {@inheritDoc} */
75      @Override
76      public final String toString()
77      {
78          Set<E> set = getUnderlyingCollection();
79          if (null == set)
80          {
81              return "ImmutableLinkedHashSet []";
82          }
83          return "ImmutableLinkedHashSet [" + set.toString() + "]";
84      }
85  
86  }