Class PatriciaTrie<E>
- java.lang.Object
-
- java.util.AbstractMap<K,V>
-
- org.jesterj.ingest.trie.AbstractBitwiseTrie<K,V>
-
- org.jesterj.ingest.trie.PatriciaTrie<E>
-
- All Implemented Interfaces:
java.io.Serializable,java.util.Map<java.lang.CharSequence,E>,java.util.SortedMap<java.lang.CharSequence,E>,org.apache.commons.collections4.Get<java.lang.CharSequence,E>,org.apache.commons.collections4.IterableGet<java.lang.CharSequence,E>,org.apache.commons.collections4.IterableMap<java.lang.CharSequence,E>,org.apache.commons.collections4.IterableSortedMap<java.lang.CharSequence,E>,org.apache.commons.collections4.OrderedMap<java.lang.CharSequence,E>,org.apache.commons.collections4.Put<java.lang.CharSequence,E>,org.apache.commons.collections4.Trie<java.lang.CharSequence,E>
public class PatriciaTrie<E> extends AbstractBitwiseTrie<K,V>
Implementation of a PATRICIA Trie (Practical Algorithm to Retrieve Information Coded in Alphanumeric).A PATRICIA
Trieis a compressedTrie. Instead of storing all data at the edges of theTrie(and having empty internal nodes), PATRICIA stores data in every node. This allows for very efficient traversal, insert, delete, predecessor, successor, prefix, range, andselect(Object)operations. All operations are performed at worst in O(K) time, where K is the number of bits in the largest item in the tree. In practice, operations actually take O(A(K)) time, where A(K) is the average number of bits of all items in the tree.Most importantly, PATRICIA requires very few comparisons to keys while doing any operation. While performing a lookup, each comparison (at most K of them, described above) will perform a single bit comparison against the given key, instead of comparing the entire key to another key.
The
Triecan return operations in lexicographical order using the 'prefixMap', 'submap', or 'iterator' methods. TheTriecan also scan for items that are 'bitwise' (using an XOR metric) by the 'select' method. Bitwise closeness is determined by theKeyAnalyzerreturning true or false for a bit being set or not in a given key.This PATRICIA
Triesupports both variable length & fixed length keys. Some methods, such asTrie.prefixMap(Object)are suited only to variable length keys.- Since:
- 4.0
- See Also:
- Radix Tree, PATRICIA, Crit-Bit Tree, Serialized Form
-
-
Field Summary
Fields Modifier and Type Field Description protected intmodCountThe number of times thisTriehas been modified.
-
Constructor Summary
Constructors Constructor Description PatriciaTrie()PatriciaTrie(java.util.Map<? extends java.lang.CharSequence,? extends E> m)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description voidclear()java.util.Comparator<? super K>comparator()booleancontainsKey(java.lang.Object k)java.util.Set<java.util.Map.Entry<K,V>>entrySet()KfirstKey()Vget(java.lang.Object k)java.util.SortedMap<K,V>headMap(K toKey)java.util.Set<K>keySet()KlastKey()org.apache.commons.collections4.OrderedMapIterator<K,V>mapIterator()KnextKey(K key)java.util.SortedMap<K,V>prefixMap(K key)KpreviousKey(K key)Vput(K key, V value)Vremove(java.lang.Object k)java.util.Map.Entry<K,V>select(K key)Returns theMap.Entrywhose key is closest in a bitwise XOR metric to the given key.KselectKey(K key)Returns the key that is closest in a bitwise XOR metric to the provided key.VselectValue(K key)Returns the value whose key is closest in a bitwise XOR metric to the provided key.intsize()java.util.SortedMap<K,V>subMap(K fromKey, K toKey)java.util.SortedMap<K,V>tailMap(K fromKey)java.util.Collection<V>values()-
Methods inherited from class org.jesterj.ingest.trie.AbstractBitwiseTrie
getKeyAnalyzer, toString
-
Methods inherited from class java.util.AbstractMap
clone, containsValue, equals, hashCode, isEmpty, putAll
-
Methods inherited from class java.lang.Object
finalize, getClass, notify, notifyAll, wait, wait, wait
-
-
-
-
Constructor Detail
-
PatriciaTrie
public PatriciaTrie()
-
PatriciaTrie
public PatriciaTrie(java.util.Map<? extends java.lang.CharSequence,? extends E> m)
-
-
Method Detail
-
clear
public void clear()
- Specified by:
clearin interfacejava.util.Map<K,V>- Specified by:
clearin interfaceorg.apache.commons.collections4.Put<K,V>- Overrides:
clearin classjava.util.AbstractMap<K,V>
-
size
public int size()
- Specified by:
sizein interfaceorg.apache.commons.collections4.Get<K,V>- Specified by:
sizein interfacejava.util.Map<K,V>- Overrides:
sizein classjava.util.AbstractMap<K,V>
-
put
public V put(K key, V value)- Specified by:
putin interfacejava.util.Map<K,V>- Specified by:
putin interfaceorg.apache.commons.collections4.Put<K,V>- Overrides:
putin classjava.util.AbstractMap<K,V>
-
get
public V get(java.lang.Object k)
- Specified by:
getin interfaceorg.apache.commons.collections4.Get<K,V>- Specified by:
getin interfacejava.util.Map<K,V>- Overrides:
getin classjava.util.AbstractMap<K,V>
-
select
public java.util.Map.Entry<K,V> select(K key)
Returns theMap.Entrywhose key is closest in a bitwise XOR metric to the given key. This is NOT lexicographic closeness. For example, given the keys:- D = 1000100
- H = 1001000
- L = 1001100
Triecontained 'H' and 'L', a lookup of 'D' would return 'L', because the XOR distance between D & L is smaller than the XOR distance between D & H.- Parameters:
key- the key to use in the search- Returns:
- the
Map.Entrywhose key is closest in a bitwise XOR metric to the provided key
-
selectKey
public K selectKey(K key)
Returns the key that is closest in a bitwise XOR metric to the provided key. This is NOT lexicographic closeness! For example, given the keys:- D = 1000100
- H = 1001000
- L = 1001100
Triecontained 'H' and 'L', a lookup of 'D' would return 'L', because the XOR distance between D & L is smaller than the XOR distance between D & H.- Parameters:
key- the key to use in the search- Returns:
- the key that is closest in a bitwise XOR metric to the provided key
-
selectValue
public V selectValue(K key)
Returns the value whose key is closest in a bitwise XOR metric to the provided key. This is NOT lexicographic closeness! For example, given the keys:- D = 1000100
- H = 1001000
- L = 1001100
Triecontained 'H' and 'L', a lookup of 'D' would return 'L', because the XOR distance between D & L is smaller than the XOR distance between D & H.- Parameters:
key- the key to use in the search- Returns:
- the value whose key is closest in a bitwise XOR metric to the provided key
-
containsKey
public boolean containsKey(java.lang.Object k)
- Specified by:
containsKeyin interfaceorg.apache.commons.collections4.Get<K,V>- Specified by:
containsKeyin interfacejava.util.Map<K,V>- Overrides:
containsKeyin classjava.util.AbstractMap<K,V>
-
entrySet
public java.util.Set<java.util.Map.Entry<K,V>> entrySet()
- Specified by:
entrySetin interfaceorg.apache.commons.collections4.Get<K,V>- Specified by:
entrySetin interfacejava.util.Map<K,V>- Specified by:
entrySetin interfacejava.util.SortedMap<K,V>- Specified by:
entrySetin classjava.util.AbstractMap<K,V>
-
keySet
public java.util.Set<K> keySet()
- Specified by:
keySetin interfaceorg.apache.commons.collections4.Get<K,V>- Specified by:
keySetin interfacejava.util.Map<K,V>- Specified by:
keySetin interfacejava.util.SortedMap<K,V>- Overrides:
keySetin classjava.util.AbstractMap<K,V>
-
values
public java.util.Collection<V> values()
- Specified by:
valuesin interfaceorg.apache.commons.collections4.Get<K,V>- Specified by:
valuesin interfacejava.util.Map<K,V>- Specified by:
valuesin interfacejava.util.SortedMap<K,V>- Overrides:
valuesin classjava.util.AbstractMap<K,V>
-
remove
public V remove(java.lang.Object k)
- Specified by:
removein interfaceorg.apache.commons.collections4.Get<K,V>- Specified by:
removein interfacejava.util.Map<K,V>- Overrides:
removein classjava.util.AbstractMap<K,V>- Throws:
java.lang.ClassCastException- if provided key is of an incompatible type
-
comparator
public java.util.Comparator<? super K> comparator()
-
firstKey
public K firstKey()
-
lastKey
public K lastKey()
-
nextKey
public K nextKey(K key)
-
previousKey
public K previousKey(K key)
-
mapIterator
public org.apache.commons.collections4.OrderedMapIterator<K,V> mapIterator()
-
prefixMap
public java.util.SortedMap<K,V> prefixMap(K key)
-
headMap
public java.util.SortedMap<K,V> headMap(K toKey)
-
subMap
public java.util.SortedMap<K,V> subMap(K fromKey, K toKey)
-
tailMap
public java.util.SortedMap<K,V> tailMap(K fromKey)
-
-