View Javadoc
1   package org.djutils.immutablecollections;
2   
3   import java.util.ArrayList;
4   import java.util.Collection;
5   import java.util.List;
6   
7   /**
8    * An immutable wrapper for an ArrayList.
9    * <p>
10   * Copyright (c) 2016-2025 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 List
19   */
20  public class ImmutableArrayList<E> extends ImmutableAbstractList<E>
21  {
22      /**
23       * @param collection the collection to use for the immutable list.
24       */
25      public ImmutableArrayList(final Collection<? extends E> collection)
26      {
27          super(new ArrayList<E>(collection), Immutable.COPY);
28      }
29  
30      /**
31       * @param list the list to use for the immutable list.
32       * @param copyOrWrap WRAP stores a pointer to the original collection
33       */
34      public ImmutableArrayList(final List<E> list, final Immutable copyOrWrap)
35      {
36          super(copyOrWrap == Immutable.COPY ? new ArrayList<E>(list) : list, copyOrWrap);
37      }
38  
39      /**
40       * @param collection the collection to use for the immutable list.
41       */
42      public ImmutableArrayList(final ImmutableAbstractCollection<? extends E> collection)
43      {
44          super(new ArrayList<E>(collection.getUnderlyingCollection()), Immutable.COPY);
45      }
46  
47      /**
48       * @param list the list to use for the immutable list.
49       * @param copyOrWrap WRAP stores a pointer to the original collection
50       */
51      public ImmutableArrayList(final ImmutableAbstractList<E> list, final Immutable copyOrWrap)
52      {
53          super(copyOrWrap == Immutable.COPY ? new ArrayList<E>(list.getUnderlyingCollection()) : list.getUnderlyingCollection(),
54                  copyOrWrap);
55      }
56  
57      @Override
58      public final ArrayList<E> toList()
59      {
60          return new ArrayList<E>(getUnderlyingCollection());
61      }
62  
63      @Override
64      protected List<E> getUnderlyingCollection()
65      {
66          return super.getUnderlyingCollection();
67      }
68  
69      @Override
70      public final ImmutableList<E> subList(final int fromIndex, final int toIndex)
71      {
72          return new ImmutableArrayList<>(getUnderlyingCollection().subList(fromIndex, toIndex));
73      }
74  
75      @Override
76      public final String toString()
77      {
78          List<E> list = getUnderlyingCollection();
79          if (null == list)
80          {
81              return "ImmutableArrayList []";
82          }
83          return "ImmutableArrayList [" + list.toString() + "]";
84      }
85  
86  }