Class SimpleBloomFilter

java.lang.Object
org.apache.commons.collections4.bloomfilter.SimpleBloomFilter
All Implemented Interfaces:
BitMapProducer, BloomFilter, IndexProducer

public final class SimpleBloomFilter extends Object implements BloomFilter
A bloom filter using an array of bit maps to track enabled bits. This is a standard implementation and should work well for most Bloom filters.
Since:
4.5
  • Constructor Details

    • SimpleBloomFilter

      public SimpleBloomFilter(Shape shape)
      Creates an empty instance.
      Parameters:
      shape - The shape for the filter.
  • Method Details

    • asBitMapArray

      public long[] asBitMapArray()
      Description copied from interface: BitMapProducer
      Return a copy of the BitMapProducer data as a bit map array.

      The default implementation of this method is slow. It is recommended that implementing classes reimplement this method.

      Specified by:
      asBitMapArray in interface BitMapProducer
      Returns:
      An array of bit map data.
    • cardinality

      public int cardinality()
      Description copied from interface: BloomFilter
      Gets the cardinality (number of enabled bits) of this Bloom filter.

      This is also known as the Hamming value or Hamming number.

      Specified by:
      cardinality in interface BloomFilter
      Returns:
      the cardinality of this filter
    • characteristics

      public int characteristics()
      Description copied from interface: BloomFilter
      Returns the characteristics of the filter.

      Characteristics are defined as bits within the characteristics integer.

      Specified by:
      characteristics in interface BloomFilter
      Returns:
      the characteristics for this bloom filter.
    • clear

      public void clear()
      Description copied from interface: BloomFilter
      Resets the filter to its initial, unpopulated state.
      Specified by:
      clear in interface BloomFilter
    • contains

      public boolean contains(IndexProducer indexProducer)
      Description copied from interface: BloomFilter
      Returns true if this filter contains the indices specified IndexProducer.

      Specifically this returns true if this filter is enabled for all bit indexes identified by the IndexProducer.

      Specified by:
      contains in interface BloomFilter
      Parameters:
      indexProducer - the IndexProducer to provide the indexes
      Returns:
      true if this filter is enabled for all bits specified by the IndexProducer
    • copy

      Description copied from interface: BloomFilter
      Creates a new instance of the BloomFilter with the same properties as the current one.
      Specified by:
      copy in interface BloomFilter
      Returns:
      a copy of this BloomFilter
    • forEachBitMap

      public boolean forEachBitMap(LongPredicate consumer)
      Description copied from interface: BitMapProducer
      Each bit map is passed to the predicate in order. The predicate is applied to each bit map value, if the predicate returns false the execution is stopped, false is returned, and no further bit maps are processed.

      If the producer is empty this method will return true.

      Any exceptions thrown by the action are relayed to the caller.

      Specified by:
      forEachBitMap in interface BitMapProducer
      Parameters:
      consumer - the function to execute
      Returns:
      true if all bit maps returned true, false otherwise.
    • forEachBitMapPair

      public boolean forEachBitMapPair(BitMapProducer other, LongBiPredicate func)
      Description copied from interface: BitMapProducer
      Applies the func to each bit map pair in order. Will apply all of the bit maps from the other BitMapProducer to this producer. If this producer does not have as many bit maps it will provide 0 (zero) for all excess calls to the LongBiPredicate.

      The default implementation of this method uses asBitMapArray(). It is recommended that implementations of BitMapProducer that have local arrays reimplement this method.

      Specified by:
      forEachBitMapPair in interface BitMapProducer
      Parameters:
      other - The other BitMapProducer that provides the y values in the (x,y) pair.
      func - The function to apply.
      Returns:
      A LongPredicate that tests this BitMapProducers bitmap values in order.
    • forEachIndex

      public boolean forEachIndex(IntPredicate consumer)
      Description copied from interface: IndexProducer
      Each index is passed to the predicate. The predicate is applied to each index value, if the predicate returns false the execution is stopped, false is returned, and no further indices are processed.

      Any exceptions thrown by the action are relayed to the caller.

      Indices ordering and uniqueness is not guaranteed.

      Specified by:
      forEachIndex in interface IndexProducer
      Parameters:
      consumer - the action to be performed for each non-zero bit index.
      Returns:
      true if all indexes return true from consumer, false otherwise.
    • getShape

      public Shape getShape()
      Description copied from interface: BloomFilter
      Gets the shape that was used when the filter was built.
      Specified by:
      getShape in interface BloomFilter
      Returns:
      The shape the filter was built with.
    • isEmpty

      public boolean isEmpty()
      Description copied from interface: BloomFilter
      Determines if all the bits are off. This is equivalent to cardinality() == 0.

      Note: This method is optimised for non-sparse filters. Implementers are encouraged to implement faster checks if possible.

      Specified by:
      isEmpty in interface BloomFilter
      Returns:
      true if no bits are enabled, false otherwise.
    • merge

      public boolean merge(BitMapProducer bitMapProducer)
      Description copied from interface: BloomFilter
      Merges the specified hasher into this Bloom filter. Specifically all bit indexes that are identified by the producer will be enabled in this filter.

      Note: This method should return true even if no additional bit indexes were enabled. A false result indicates that this filter may or may not contain all the indexes enabled in the producer. This state may occur in complex Bloom filter implementations like counting Bloom filters.

      Specified by:
      merge in interface BloomFilter
      Parameters:
      bitMapProducer - The producer to merge.
      Returns:
      true if the merge was successful
    • merge

      public boolean merge(BloomFilter other)
      Description copied from interface: BloomFilter
      Merges the specified Bloom filter into this Bloom filter.

      Specifically all bit indexes that are identified by the other will be enabled in this filter.

      Note: This method should return true even if no additional bit indexes were enabled. A false result indicates that this filter may or may not contain the other Bloom filter. This state may occur in complex Bloom filter implementations like counting Bloom filters.

      Specified by:
      merge in interface BloomFilter
      Parameters:
      other - The bloom filter to merge into this one.
      Returns:
      true if the merge was successful
    • merge

      public boolean merge(Hasher hasher)
      Description copied from interface: BloomFilter
      Merges the specified hasher into this Bloom filter. Specifically all bit indexes that are identified by the hasher will be enabled in this filter.

      Note: This method should return true even if no additional bit indexes were enabled. A false result indicates that this filter may or may not contain the hasher values. This state may occur in complex Bloom filter implementations like counting Bloom filters.

      Specified by:
      merge in interface BloomFilter
      Parameters:
      hasher - The hasher to merge.
      Returns:
      true if the merge was successful
    • merge

      public boolean merge(IndexProducer indexProducer)
      Description copied from interface: BloomFilter
      Merges the specified IndexProducer into this Bloom filter. Specifically all bit indexes that are identified by the producer will be enabled in this filter.

      Note: This method should return true even if no additional bit indexes were enabled. A false result indicates that this filter may or may not contain all the indexes of the producer. This state may occur in complex Bloom filter implementations like counting Bloom filters.

      Specified by:
      merge in interface BloomFilter
      Parameters:
      indexProducer - The IndexProducer to merge.
      Returns:
      true if the merge was successful