Javolution 6.0.0 java
CollectionView.java
Go to the documentation of this file.
1 /*
2  * Javolution - Java(TM) Solution for Real-Time and Embedded Systems
3  * Copyright (C) 2012 - Javolution (http://javolution.org/)
4  * All rights reserved.
5  *
6  * Permission to use, copy, modify, and distribute this software is
7  * freely granted, provided that this notice is preserved.
8  */
9 package javolution.util.internal.collection;
10 
11 import java.util.Collection;
12 import java.util.Iterator;
13 import java.util.List;
14 import java.util.Set;
15 
21 
29 public abstract class CollectionView<E> extends FastCollection<E> implements CollectionService<E> {
30 //public abstract class CollectionView<E> implements CollectionService<E> {
31 
32  private static final long serialVersionUID = 0x600L; // Version.
34 
39  this.target = target;
40  }
41 
42  @Override
43  public abstract boolean add(E element);
44 
45  @Override
46  public boolean addAll(Collection<? extends E> c) {
47  boolean changed = false;
48  Iterator<? extends E> it = c.iterator();
49  while (it.hasNext()) {
50  if (add(it.next())) changed = true;
51  }
52  return changed;
53  }
54 
55  @Override
56  public void clear() {
57  Iterator<? extends E> it = iterator();
58  while (it.hasNext()) {
59  it.next();
60  it.remove();
61  }
62  }
63 
64  @SuppressWarnings("unchecked")
65  @Override
67  try {
68  CollectionView<E> copy = (CollectionView<E>) super.clone();
69  if (target != null) { // Not a root class.
70  copy.target = target.clone();
71  }
72  return copy;
73  } catch (CloneNotSupportedException e) {
74  throw new Error("Should not happen since target is cloneable");
75  }
76  }
77 
78  @Override
79  public abstract Equality<? super E> comparator();
80 
81  @Override
82  @SuppressWarnings("unchecked")
83  public boolean contains(Object obj) {
84  Iterator<? extends E> it = iterator();
86  while (it.hasNext()) {
87  if (cmp.areEqual(obj, it.next())) return true;
88  }
89  return false;
90  }
91 
92  @Override
93  public boolean containsAll(Collection<?> c) {
94  for (Object e : c) {
95  if (!contains(e)) return false;
96  }
97  return true;
98  }
99 
100  @SuppressWarnings("unchecked")
101  @Override
102  public boolean equals(Object o) {
103  // Follow Collection.equals specification if this comparator is standard.
104  if (this == o) return true;
105  // Check comparators consistency.
106  if (o instanceof CollectionService) {
107  if (!comparator().equals(((CollectionService<E>) o).comparator())) return false; // Different comparators.
108  } else {
109  if (!comparator().equals(Equalities.STANDARD)) return false;
110  }
111  // Collection.equals contract.
112  if (this instanceof Set) {
113  if (!(o instanceof Set)) return false;
114  Set<E> set = (Set<E>) o;
115  return (size() == set.size()) && containsAll(set);
116  } else if (this instanceof List) {
117  if (!(o instanceof List)) return false;
118  List<E> list = (List<E>) o;
119  if (size() != list.size()) return false; // Short-cut.
121  Iterator<E> it1 = this.iterator();
122  Iterator<E> it2 = list.iterator();
123  while (it1.hasNext()) {
124  if (!it2.hasNext()) return false;
125  if (!cmp.areEqual(it1.next(), it2.next())) return false;
126  }
127  if (it2.hasNext()) return false;
128  return true;
129  } else {
130  return false;
131  }
132  }
133 
134  @Override
135  public int hashCode() {
136  // Follow Collection.equals specification if this comparator is standard.
138  Iterator<E> it = this.iterator();
139  int hash = 0;
140  if (this instanceof Set) {
141  while (it.hasNext()) {
142  hash += cmp.hashCodeOf(it.next());
143  }
144  } else if (this instanceof List) {
145  while (it.hasNext()) {
146  hash += 31 * hash + cmp.hashCodeOf(it.next());
147  }
148  } else {
149  hash = super.hashCode();
150  }
151  return hash;
152  }
153 
154  @Override
155  public boolean isEmpty() {
156  return iterator().hasNext();
157  }
158 
159  @Override
160  public abstract Iterator<E> iterator();
161 
162  @Override
164  if (target == null) {
165  action.accept(view);
166  } else {
167  target.perform(action, view);
168  }
169  }
170 
171  @Override
172  @SuppressWarnings("unchecked")
173  public boolean remove(Object obj) {
174  Iterator<? extends E> it = iterator();
176  while (it.hasNext()) {
177  if (cmp.areEqual(obj, it.next())) {
178  it.remove();
179  return true;
180  }
181  }
182  return false;
183  }
184 
185  @Override
186  public boolean removeAll(Collection<?> c) {
187  boolean changed = false;
188  Iterator<? extends E> it = iterator();
189  while (it.hasNext()) {
190  if (c.contains(it.next())) {
191  it.remove();
192  changed = true;
193  }
194  }
195  return changed;
196  }
197 
198  @Override
199  public boolean retainAll(Collection<?> c) {
200  boolean changed = false;
201  Iterator<? extends E> it = iterator();
202  while (it.hasNext()) {
203  if (!c.contains(it.next())) {
204  it.remove();
205  changed = true;
206  }
207  }
208  return changed;
209  }
210 
211  @Override
212  public int size() {
213  int count = 0;
214  Iterator<? extends E> it = iterator();
215  while (it.hasNext()) {
216  count++;
217  it.next();
218  }
219  return count;
220  }
221 
222  @SuppressWarnings("unchecked")
223  @Override
224  public CollectionService<E>[] split(int n) {
225  if (target == null) return new CollectionService[] { this }; // No split.
226  CollectionService<E>[] subTargets = target.split(n);
227  CollectionService<E>[] result = new CollectionService[subTargets.length];
228  for (int i = 0; i < subTargets.length; i++) {
229  CollectionView<E> copy = this.clone();
230  copy.target = subTargets[i];
231  result[i] = copy;
232  }
233  return result;
234  }
235 
236  @Override
238  // We use shared collection as default (they can split).
239  return new SharedCollectionImpl<E>(this);
240  }
241 
242  @Override
243  public Object[] toArray() {
244  return toArray(new Object[size()]);
245  }
246 
247  @Override
248  @SuppressWarnings("unchecked")
249  public <T> T[] toArray(T[] a) {
250  final int size = size();
251  final T[] result = (size <= a.length) ? a
252  : (T[]) java.lang.reflect.Array.newInstance(a.getClass()
253  .getComponentType(), size);
254  int i = 0;
255  Iterator<E> it = iterator();
256  while (it.hasNext()) {
257  result[i++] = (T) it.next();
258  }
259  if (result.length > size) {
260  result[size] = null; // As per Collection contract.
261  }
262  return result;
263  }
264 
265  @Override
267  if (target == null) {
268  action.accept(view);
269  } else {
270  target.perform(action, view);
271  }
272  }
273 
275  return this;
276  }
277 
280  return target;
281  }
282 }
javolution.util.function.Equality.areEqual
boolean areEqual(T left, T right)
javolution.util.function.Equalities.STANDARD
static final Equality< Object > STANDARD
Definition: Equalities.java:31
javolution.util.internal.collection.CollectionView.split
CollectionService< E >[] split(int n)
Definition: CollectionView.java:224
javolution
javolution.util.service
Definition: BitSetService.java:9
javolution.util.internal.collection.CollectionView
Definition: CollectionView.java:29
javolution.util.internal.collection.CollectionView.add
abstract boolean add(E element)
javolution.util.internal.collection.CollectionView.CollectionView
CollectionView(CollectionService< E > target)
Definition: CollectionView.java:38
javolution.util.internal.collection.CollectionView.threadSafe
CollectionService< E > threadSafe()
Definition: CollectionView.java:237
javolution.util.internal.collection.CollectionView.clear
void clear()
Definition: CollectionView.java:56
javolution.util.function.Consumer
Definition: Consumer.java:22
javolution.util.internal.collection.SharedCollectionImpl
Definition: SharedCollectionImpl.java:21
javolution.util.internal.collection.CollectionView.contains
boolean contains(Object obj)
Definition: CollectionView.java:83
javolution.util.service.CollectionService
Definition: CollectionService.java:25
javolution.util.internal.collection.CollectionView.comparator
abstract Equality<? super E > comparator()
javolution.util.internal.collection.CollectionView.size
int size()
Definition: CollectionView.java:212
javolution.util.function.Equality
Definition: Equality.java:39
javolution.util.internal.collection.CollectionView.target
CollectionService< E > target()
Definition: CollectionView.java:279
javolution.util.function.Equalities
Definition: Equalities.java:20
javolution.util.internal.collection.CollectionView.perform
void perform(Consumer< CollectionService< E >> action, CollectionService< E > view)
Definition: CollectionView.java:163
javolution.util.internal.collection.CollectionView.service
CollectionService< E > service()
Definition: CollectionView.java:274
javolution.util.internal.collection.CollectionView.target
CollectionService< E > target
Definition: CollectionView.java:33
javolution.util.internal.collection.CollectionView.iterator
abstract Iterator< E > iterator()
javolution.util.internal.collection.CollectionView.equals
boolean equals(Object o)
Definition: CollectionView.java:102
javolution.util.internal.collection.CollectionView.addAll
boolean addAll(Collection<? extends E > c)
Definition: CollectionView.java:46
javolution.util.function
Definition: Consumer.java:9
javolution.util.FastCollection
Definition: FastCollection.java:166
javolution.util.internal.collection.CollectionView.toArray
Object[] toArray()
Definition: CollectionView.java:243
javolution.util.internal.collection.CollectionView.retainAll
boolean retainAll(Collection<?> c)
Definition: CollectionView.java:199
javolution.util.internal.collection.CollectionView.hashCode
int hashCode()
Definition: CollectionView.java:135
javolution.util.internal.collection.CollectionView.removeAll
boolean removeAll(Collection<?> c)
Definition: CollectionView.java:186
javolution.util.function.Equality.hashCodeOf
int hashCodeOf(T object)
javolution.util.internal.collection.CollectionView.serialVersionUID
static final long serialVersionUID
Definition: CollectionView.java:32
javolution.util.internal.collection.CollectionView.isEmpty
boolean isEmpty()
Definition: CollectionView.java:155
javolution.util.internal.collection.CollectionView.clone
CollectionView< E > clone()
Definition: CollectionView.java:66
javolution.util
Definition: FastBitSet.java:9
javolution.util.internal.collection.CollectionView.remove
boolean remove(Object obj)
Definition: CollectionView.java:173
javolution.util.internal.collection.CollectionView.update
void update(Consumer< CollectionService< E >> action, CollectionService< E > view)
Definition: CollectionView.java:266
javolution.util.internal.collection.CollectionView.containsAll
boolean containsAll(Collection<?> c)
Definition: CollectionView.java:93