Array-based Implementation
- Implement Map using an ArrayList internally.
Open ArrayMap
in the starter code. This implementation uses Java's ArrayList internally. It is inefficient; all operations take $\Omicron(n)$ time. The iterator()
method makes a copy of all keys, so it takes $\Omicron(n)$ extra time and space to initiate the iteration (although next
and hasNext
are $\Omicron(1)$).
Notice the ArrayMap
class uses the following structure:
// Entry to store a key and a value pair.
private static class Entry<K, V> {
K key;
V value;
Entry(K k, V v) {
this.key = k;
this.value = v;
}
}
We could have used two arrays in parallel and manage insert/remove ourselves (instead of delegating it to ArrayList).
private K[] keys;
private V[] values;
You should probably think about this alternative implementation as it makes for a great exam question!
Use ArrayMapTest
to test any alternative implementation of ArrayMap
. The ArrayMapTest
extends MapTest
. Take a moment and review the tests which we have provided in the starter code.
Efficient implementations of Map are done either as a "hash table" or a "search tree."
We will explore these implementations in the several following chapters.