Interface InvertedRadixTree<O>

Type Parameters:
O - The type of the values associated with keys in the tree
All Superinterfaces:
RadixTree<O>
All Known Implementing Classes:
ConcurrentInvertedRadixTree

public interface InvertedRadixTree<O> extends RadixTree<O>
API of an inverted radix tree, that is a radix tree which is set up to scan external documents for keys previously added to the tree, rather than for data contained in the tree itself.

This method of scanning external documents for keys (or keywords) can be significantly faster than repeatedly scanning the same document for each and every keyword using String.contains(CharSequence) on the document.

Time complexity is O(d) rather than O(dn), where d=length of document and n=number of keys/keywords.

This is an extension of RadixTree which provides additional traversal algorithms to implement this functionality on top of the same tree structure. See documentation on each method for details.

  • Method Details

    • put

      O put(CharSequence key, O value)
      Associates the given value with the given key; replacing any previous value associated with the key. Returns the previous value associated with the key, if any.

      This operation is performed atomically.

      Specified by:
      put in interface RadixTree<O>
      Parameters:
      key - The key with which the specified value should be associated
      value - The value to associate with the key, which cannot be null
      Returns:
      The previous value associated with the key, if there was one, otherwise null
    • putIfAbsent

      O putIfAbsent(CharSequence key, O value)
      If a value is not already associated with the given key in the tree, associates the given value with the key; otherwise if an existing value is already associated, returns the existing value and does not overwrite it.

      This operation is performed atomically.

      Specified by:
      putIfAbsent in interface RadixTree<O>
      Parameters:
      key - The key with which the specified value should be associated
      value - The value to associate with the key, which cannot be null
      Returns:
      The existing value associated with the key, if there was one; otherwise null in which case the new value was successfully associated
    • remove

      boolean remove(CharSequence key)
      Removes the value associated with the given key (exact match). If no value is associated with the key, does nothing.
      Specified by:
      remove in interface RadixTree<O>
      Parameters:
      key - The key for which an associated value should be removed
      Returns:
      True if a value was removed (and therefore was associated with the key), false if no value was associated/removed
    • getValueForExactKey

      O getValueForExactKey(CharSequence key)
      Returns the value associated with the given key (exact match), or returns null if no such value is associated with the key.
      Specified by:
      getValueForExactKey in interface RadixTree<O>
      Parameters:
      key - The key with which a sought value might be associated
      Returns:
      The value associated with the given key (exact match), or null if no value was associated with the key
    • getKeysPrefixing

      Iterable<CharSequence> getKeysPrefixing(CharSequence document)
      Returns a lazy iterable which returns the set of keys in the tree which prefix the given document.
      Parameters:
      document - A document to be scanned for keys contained in the tree which prefix the given document
      Returns:
      The set of keys in the tree which prefix the given document
    • getValuesForKeysPrefixing

      Iterable<O> getValuesForKeysPrefixing(CharSequence document)
      Returns a lazy iterable which returns the set of values associated with keys in the tree which prefix the given document.
      Parameters:
      document - A document to be scanned for keys contained in the tree which prefix the given document
      Returns:
      The set of values associated with keys in the tree which prefix the given document
    • getKeyValuePairsForKeysPrefixing

      Iterable<KeyValuePair<O>> getKeyValuePairsForKeysPrefixing(CharSequence document)
      Returns a lazy iterable which returns the set of KeyValuePairs for keys in the tree which prefix the given document.
      Parameters:
      document - A document to be scanned for keys contained in the tree which prefix the given document
      Returns:
      The set of KeyValuePairs for keys in the tree which prefix the given document
    • getLongestKeyPrefixing

      CharSequence getLongestKeyPrefixing(CharSequence document)
      Returns the longest key in the tree which is a prefix of the given document.
      Parameters:
      document - A document to be scanned for a key contained in the tree which prefixes the given document
      Returns:
      The longest key in the tree which is a prefix of the given document, or null if no such key is contained in the tree
    • getValueForLongestKeyPrefixing

      O getValueForLongestKeyPrefixing(CharSequence document)
      Returns the value associated with the longest key in the tree which is a prefix of the given document.
      Parameters:
      document - A document to be scanned for a key contained in the tree which prefixes the given document
      Returns:
      The value associated with longest key in the tree which is a prefix of the given document, or null if no such key is contained in the tree
    • getKeyValuePairForLongestKeyPrefixing

      KeyValuePair<O> getKeyValuePairForLongestKeyPrefixing(CharSequence document)
      Returns the KeyValuePair for the longest key in the tree which is a prefix of the given document.
      Parameters:
      document - A document to be scanned for a key contained in the tree which prefixes the given document
      Returns:
      The KeyValuePair for the longest key in the tree which is a prefix of the given document, or null if no such key is contained in the tree
    • getKeysContainedIn

      Iterable<CharSequence> getKeysContainedIn(CharSequence document)
      Returns a lazy iterable which returns the set of keys in the tree which are contained in the given document.
      Parameters:
      document - A document to be scanned for keys contained in the tree
      Returns:
      The set of keys in the tree which are contained in the given document
    • getValuesForKeysContainedIn

      Iterable<O> getValuesForKeysContainedIn(CharSequence document)
      Returns a lazy iterable which returns the set of values associated with keys in the tree which are contained in the given document.
      Parameters:
      document - A document to be scanned for keys contained in the tree
      Returns:
      The set of values associated with keys in the tree which are contained in the given document
    • getKeyValuePairsForKeysContainedIn

      Iterable<KeyValuePair<O>> getKeyValuePairsForKeysContainedIn(CharSequence document)
      Returns a lazy iterable which returns the set of KeyValuePairs for keys in the tree which are contained in the given document.
      Parameters:
      document - A document to be scanned for keys contained in the tree
      Returns:
      The set of KeyValuePairs for keys in the tree which are contained in the given document
    • size

      int size()
      Counts the number of keys/values stored in the tree.

      In the current implementation, this is an expensive operation, having O(n) time complexity.

      Specified by:
      size in interface RadixTree<O>
      Returns:
      The number of keys/values stored in the tree