Javolution 6.0.0 java
DistinctCollectionImpl.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.Iterator;
12 
13 import javolution.util.FastSet;
16 
20 public class DistinctCollectionImpl<E> extends CollectionView<E> {
21 
23  private class IteratorImpl implements Iterator<E> {
24 
25  private boolean ahead;
26  private final FastSet<E> iterated = new FastSet<E>(comparator());
27  private E next;
28  private final Iterator<E> targetIterator = target().iterator();
29 
30  @Override
31  public boolean hasNext() {
32  if (ahead) return true;
33  while (targetIterator.hasNext()) {
34  next = targetIterator.next();
35  if (!iterated.contains(next)) {
36  ahead = true;
37  return true;
38  }
39  }
40  return false;
41  }
42 
43  @Override
44  public E next() {
45  hasNext(); // Moves ahead.
46  ahead = false;
47  return next;
48  }
49 
50  @Override
51  public void remove() {
52  targetIterator.remove();
53  }
54  }
55 
56  private static final long serialVersionUID = 0x600L; // Version.
57 
59  super(target);
60  }
61 
62  @Override
63  public boolean add(E element) {
64  if (target().contains(element)) return false;
65  return target().add(element);
66  }
67 
68  @Override
69  public void clear() {
70  target().clear();
71  }
72 
73  @Override
75  return target().comparator();
76  }
77 
78  @Override
79  public boolean contains(Object o) {
80  return target().contains(o);
81  }
82 
83  @Override
84  public boolean isEmpty() {
85  return target().isEmpty();
86  }
87 
88  @Override
89  public Iterator<E> iterator() {
90  return new IteratorImpl();
91  }
92 
93  @Override
94  public boolean remove(Object o) { // Remove all instances.
95  boolean changed = false;
96  while (true) {
97  if (!remove(o)) return changed;
98  changed = true;
99  }
100  }
101 
102 }
javolution.util.internal.collection.DistinctCollectionImpl.IteratorImpl.ahead
boolean ahead
Definition: DistinctCollectionImpl.java:25
javolution.util.internal.collection.DistinctCollectionImpl.serialVersionUID
static final long serialVersionUID
Definition: DistinctCollectionImpl.java:56
javolution.util.internal.collection.DistinctCollectionImpl.IteratorImpl.targetIterator
final Iterator< E > targetIterator
Definition: DistinctCollectionImpl.java:28
javolution
javolution.util.service
Definition: BitSetService.java:9
javolution.util.internal.collection.CollectionView
Definition: CollectionView.java:29
javolution.util.internal.collection.DistinctCollectionImpl.isEmpty
boolean isEmpty()
Definition: DistinctCollectionImpl.java:84
javolution.util.internal.collection.DistinctCollectionImpl.IteratorImpl.next
E next()
Definition: DistinctCollectionImpl.java:44
javolution.util.service.CollectionService
Definition: CollectionService.java:25
javolution.util.internal.collection.DistinctCollectionImpl.add
boolean add(E element)
Definition: DistinctCollectionImpl.java:63
javolution.util.internal.collection.DistinctCollectionImpl.DistinctCollectionImpl
DistinctCollectionImpl(CollectionService< E > target)
Definition: DistinctCollectionImpl.java:58
javolution.util.function.Equality
Definition: Equality.java:39
javolution.util.internal.collection.DistinctCollectionImpl
Definition: DistinctCollectionImpl.java:20
javolution.util.internal.collection.DistinctCollectionImpl.IteratorImpl.hasNext
boolean hasNext()
Definition: DistinctCollectionImpl.java:31
javolution.util.internal.collection.CollectionView.target
CollectionService< E > target
Definition: CollectionView.java:33
javolution.util.function
Definition: Consumer.java:9
javolution.util.internal.collection.DistinctCollectionImpl.contains
boolean contains(Object o)
Definition: DistinctCollectionImpl.java:79
javolution.util.internal.collection.DistinctCollectionImpl.comparator
Equality<? super E > comparator()
Definition: DistinctCollectionImpl.java:74
javolution.util.internal.collection.DistinctCollectionImpl.IteratorImpl.iterated
final FastSet< E > iterated
Definition: DistinctCollectionImpl.java:26
javolution.util.internal.collection.DistinctCollectionImpl.clear
void clear()
Definition: DistinctCollectionImpl.java:69
javolution.util.internal.collection.DistinctCollectionImpl.IteratorImpl.next
E next
Definition: DistinctCollectionImpl.java:27
javolution.util.internal.collection.DistinctCollectionImpl.IteratorImpl
Definition: DistinctCollectionImpl.java:23
javolution.util.FastSet
Definition: FastSet.java:37
javolution.util
Definition: FastBitSet.java:9
javolution.util.internal.collection.DistinctCollectionImpl.iterator
Iterator< E > iterator()
Definition: DistinctCollectionImpl.java:89