1 package org.djutils.immutablecollections;
2
3 import java.util.Collection;
4 import java.util.Comparator;
5 import java.util.NavigableSet;
6 import java.util.TreeSet;
7
8
9
10
11
12
13
14
15
16
17
18
19
20 public class ImmutableTreeSet<E> extends ImmutableAbstractSet<E> implements ImmutableNavigableSet<E>
21 {
22
23
24
25 public ImmutableTreeSet(final Collection<? extends E> sortedSet)
26 {
27 super(new TreeSet<E>(sortedSet), Immutable.COPY);
28 }
29
30
31
32
33
34 public ImmutableTreeSet(final NavigableSet<E> treeSet, final Immutable copyOrWrap)
35 {
36 super(copyOrWrap == Immutable.COPY ? new TreeSet<E>(treeSet) : treeSet, copyOrWrap);
37 }
38
39
40
41
42 public ImmutableTreeSet(final ImmutableAbstractSet<E> immutableSortedSet)
43 {
44 super(new TreeSet<E>(immutableSortedSet.getUnderlyingCollection()), Immutable.COPY);
45 }
46
47
48
49
50
51 public ImmutableTreeSet(final ImmutableTreeSet<E> immutableTreeSet, final Immutable copyOrWrap)
52 {
53 super(copyOrWrap == Immutable.COPY ? new TreeSet<E>(immutableTreeSet.getUnderlyingCollection())
54 : immutableTreeSet.getUnderlyingCollection(), copyOrWrap);
55 }
56
57 @Override
58 public final NavigableSet<E> toSet()
59 {
60 return new TreeSet<E>(getUnderlyingCollection());
61 }
62
63 @Override
64 protected NavigableSet<E> getUnderlyingCollection()
65 {
66 return (NavigableSet<E>) super.getUnderlyingCollection();
67 }
68
69 @Override
70 public final Comparator<? super E> comparator()
71 {
72 return getUnderlyingCollection().comparator();
73 }
74
75 @Override
76 public final ImmutableSortedSet<E> subSet(final E fromElement, final E toElement)
77 {
78 return new ImmutableTreeSet<E>((TreeSet<E>) getUnderlyingCollection().subSet(fromElement, toElement), Immutable.WRAP);
79 }
80
81 @Override
82 public final ImmutableSortedSet<E> headSet(final E toElement)
83 {
84 return new ImmutableTreeSet<E>((TreeSet<E>) getUnderlyingCollection().headSet(toElement), Immutable.WRAP);
85 }
86
87 @Override
88 public final ImmutableSortedSet<E> tailSet(final E fromElement)
89 {
90 return new ImmutableTreeSet<E>((TreeSet<E>) getUnderlyingCollection().tailSet(fromElement), Immutable.WRAP);
91 }
92
93 @Override
94 public final E first()
95 {
96 return getUnderlyingCollection().first();
97 }
98
99 @Override
100 public final E last()
101 {
102 return getUnderlyingCollection().last();
103 }
104
105 @Override
106 public final E lower(final E e)
107 {
108 return getUnderlyingCollection().lower(e);
109 }
110
111 @Override
112 public final E floor(final E e)
113 {
114 return getUnderlyingCollection().floor(e);
115 }
116
117 @Override
118 public final E ceiling(final E e)
119 {
120 return getUnderlyingCollection().ceiling(e);
121 }
122
123 @Override
124 public final E higher(final E e)
125 {
126 return getUnderlyingCollection().higher(e);
127 }
128
129 @Override
130 public final ImmutableNavigableSet<E> descendingSet()
131 {
132 return new ImmutableTreeSet<E>(getUnderlyingCollection().descendingSet());
133 }
134
135 @Override
136 public final ImmutableIterator<E> descendingIterator()
137 {
138 return new ImmutableIterator<E>(getUnderlyingCollection().descendingIterator());
139 }
140
141 @Override
142 public final ImmutableNavigableSet<E> subSet(final E fromElement, final boolean fromInclusive, final E toElement,
143 final boolean toInclusive)
144 {
145 return new ImmutableTreeSet<E>(getUnderlyingCollection().subSet(fromElement, fromInclusive, toElement, toInclusive),
146 Immutable.WRAP);
147 }
148
149 @Override
150 public final ImmutableNavigableSet<E> headSet(final E toElement, final boolean inclusive)
151 {
152 return new ImmutableTreeSet<E>(getUnderlyingCollection().headSet(toElement, inclusive), Immutable.WRAP);
153 }
154
155 @Override
156 public final ImmutableNavigableSet<E> tailSet(final E fromElement, final boolean inclusive)
157 {
158 return new ImmutableTreeSet<E>(getUnderlyingCollection().tailSet(fromElement, inclusive), Immutable.WRAP);
159 }
160
161 @Override
162 public final String toString()
163 {
164 NavigableSet<E> set = getUnderlyingCollection();
165 if (null == set)
166 {
167 return "ImmutableTreeSet []";
168 }
169 return "ImmutableTreeSet [" + set.toString() + "]";
170 }
171
172 }