Red-black tree
 All Classes Functions
RedBlackTreeSet.java
1 /*
2  * Created by: Karol Sobczak (napewnotrafi@gmail.com)
3  */
4 package org.adblocktv.tagsserver.utils.rbtree;
5 
6 import java.util.Iterator;
7 
8 /**
9  * A simple implementation of a set using an underlying red-black tree.
10  * @author Karol Sobczak
11  */
12 public class RedBlackTreeSet<K extends Comparable>
13  extends RedBlackTree<K, Object>
14  implements Iterable<K> {
15 
16  /**
17  * An iterator for the red-black tree set.
18  */
19  private class RedBlackTreeSetIterator implements Iterator<K> {
20 
21  private Iterator<Node> nodesIterator = nodesIterator();
22 
23  @Override
24  public boolean hasNext() {
25  return nodesIterator.hasNext();
26  }
27 
28  @Override
29  public K next() {
30  return nodesIterator.next().getKey();
31  }
32 
33  @Override
34  public void remove() {
35  }
36  }
37 
38  /**
39  * Adds a value to the set.
40  * @param e a value to be added to the set
41  */
42  public void add(K e) {
43  Node node = search(e);
44  if (node == getNilNode()) {
45  add(new Node(e, null));
46  }
47  }
48 
49  /**
50  * Checks if the set contains a given value.
51  * @param e a value to be checked for existence
52  * @return true if the set contains a given value
53  */
54  public boolean contains(K e) {
55  Node node = search(e);
56  return node != getNilNode();
57  }
58 
59  /**
60  * Removes a given value from the set.
61  * @param e a value to be removed from the set
62  */
63  public void remove(K e) {
64  Node node = search(e);
65  if (node != getNilNode()) {
66  remove(node);
67  }
68  }
69 
70  /**
71  * Returns an iterator for the set (ascending order).
72  * @return an iterator for the set (ascending order)
73  */
74  @Override
75  public Iterator<K> iterator() {
76  return new RedBlackTreeSetIterator();
77  }
78 }