public class RedBlackBST<Key extends Comparable<Key>,Value> extends Object
BST class represents an ordered symbol table of generic
key-value pairs.
It supports the usual put, get, contains,
delete, size, and is-empty methods.
It also provides ordered methods for finding the minimum,
maximum, floor, and ceiling.
It also provides a keys method for iterating over all of the keys.
A symbol table implements the associative array abstraction:
when associating a value with a key that is already in the symbol table,
the convention is to replace the old value with the new value.
Unlike Map, this class uses the convention that
values cannot be null—setting the
value associated with a key to null is equivalent to deleting the key
from the symbol table.
It requires that
the key type implements the Comparable interface and calls the
compareTo() and method to compare two keys. It does not call either
equals() or hashCode().
This implementation uses a left-leaning red-black BST. The put, get, contains, remove, minimum, maximum, ceiling, floor, rank, and select operations each take Θ(log n) time in the worst case, where n is the number of key-value pairs in the symbol table. The size, and is-empty operations take Θ(1) time. The keys methods take O(log n + m) time, where m is the number of keys returned by the iterator. Construction takes Θ(1) time.
For alternative implementations of the symbol table API, see ST,
BinarySearchST, SequentialSearchST, BST,
SeparateChainingHashST, LinearProbingHashST, and
AVLTreeST.
For additional documentation, see
Section 3.3 of
Algorithms, 4th Edition by Robert Sedgewick and Kevin Wayne.
| Constructor and Description |
|---|
RedBlackBST()
Initializes an empty symbol table.
|
| Modifier and Type | Method and Description |
|---|---|
Key |
ceiling(Key key)
Returns the smallest key in the symbol table greater than or equal to
key. |
boolean |
contains(Key key)
Does this symbol table contain the given key?
|
void |
delete(Key key)
Removes the specified key and its associated value from this symbol table
(if the key is in this symbol table).
|
void |
deleteMax()
Removes the largest key and associated value from the symbol table.
|
void |
deleteMin()
Removes the smallest key and associated value from the symbol table.
|
Key |
floor(Key key)
Returns the largest key in the symbol table less than or equal to
key. |
Value |
get(Key key)
Returns the value associated with the given key.
|
int |
height()
Returns the height of the BST (for debugging).
|
boolean |
isEmpty()
Is this symbol table empty?
|
Iterable<Key> |
keys()
Returns all keys in the symbol table in ascending order as an
Iterable. |
Iterable<Key> |
keys(Key lo,
Key hi)
Returns all keys in the symbol table in the given range in ascending order,
as an
Iterable. |
static void |
main(String[] args)
Unit tests the
RedBlackBST data type. |
Key |
max()
Returns the largest key in the symbol table.
|
Key |
min()
Returns the smallest key in the symbol table.
|
void |
put(Key key,
Value val)
Inserts the specified key-value pair into the symbol table, overwriting the old
value with the new value if the symbol table already contains the specified key.
|
int |
rank(Key key)
Return the number of keys in the symbol table strictly less than
key. |
Key |
select(int rank)
Return the key in the symbol table of a given
rank. |
int |
size()
Returns the number of key-value pairs in this symbol table.
|
int |
size(Key lo,
Key hi)
Returns the number of keys in the symbol table in the given range.
|
public int size()
public boolean isEmpty()
true if this symbol table is empty and false otherwisepublic Value get(Key key)
key - the keynull if the key is not in the symbol tableIllegalArgumentException - if key is nullpublic boolean contains(Key key)
key - the keytrue if this symbol table contains key and
false otherwiseIllegalArgumentException - if key is nullpublic void put(Key key, Value val)
null.key - the keyval - the valueIllegalArgumentException - if key is nullpublic void deleteMin()
NoSuchElementException - if the symbol table is emptypublic void deleteMax()
NoSuchElementException - if the symbol table is emptypublic void delete(Key key)
key - the keyIllegalArgumentException - if key is nullpublic int height()
public Key min()
NoSuchElementException - if the symbol table is emptypublic Key max()
NoSuchElementException - if the symbol table is emptypublic Key floor(Key key)
key.key - the keykeyNoSuchElementException - if there is no such keyIllegalArgumentException - if key is nullpublic Key ceiling(Key key)
key.key - the keykeyNoSuchElementException - if there is no such keyIllegalArgumentException - if key is nullpublic Key select(int rank)
rank.
This key has the property that there are rank keys in
the symbol table that are smaller. In other words, this key is the
(rank+1)st smallest key in the symbol table.rank - the order statisticrankIllegalArgumentException - unless rank is between 0 and
n–1public int rank(Key key)
key.key - the keykeyIllegalArgumentException - if key is nullpublic Iterable<Key> keys()
Iterable.
To iterate over all of the keys in the symbol table named st,
use the foreach notation: for (Key key : st.keys()).public Iterable<Key> keys(Key lo, Key hi)
Iterable.lo - minimum endpointhi - maximum endpointlo
(inclusive) and hi (inclusive) in ascending orderIllegalArgumentException - if either lo or hi
is nullpublic int size(Key lo, Key hi)
lo - minimum endpointhi - maximum endpointlo
(inclusive) and hi (inclusive)IllegalArgumentException - if either lo or hi
is nullpublic static void main(String[] args)
RedBlackBST data type.args - the command-line arguments