Package org.apache.lucene.util

## Class SentinelIntSet

- java.lang.Object
- - org.apache.lucene.util.SentinelIntSet

-     public class SentinelIntSet
      extends Object

  A native int hash-based set where one value is reserved to mean "EMPTY" internally. The space overhead is fairly low as there is only one power-of-two sized int[] to hold the values. The set is re-hashed when adding a value that would make it >= 75% full. Consider extending and over-riding `hash(int)` if the values might be poor hash keys; Lucene docids should be fine. The internal fields are exposed publicly to enable more efficient use at the expense of better O-O principles.

  To iterate over the integers held in this set, simply use code like this:

       SentinelIntSet set = ...
       for (int v : set.keys) {
         if (v == set.emptyVal)
           continue;
         //use v...
       }

  NOTE: This API is for internal purposes only and might change in incompatible ways in the next release.

- - ### Field Summary

    Fields
    Modifier and Type | Field | Description
    --- | --- | ---
    `int` | `count` |
    `int` | `emptyVal` |
    `int[]` | `keys` | A power-of-2 over-sized array holding the integers in the set along with empty values.
    `int` | `rehashCount` | the count at which a rehash should be done

  - ### Constructor Summary

    Constructors
    Constructor | Description
    --- | ---
    `SentinelIntSet​(int size, int emptyVal)` |

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `void` | `clear()` |
    `boolean` | `exists​(int key)` | Does this set contain the specified integer?
    `int` | `find​(int key)` | (internal) Returns the slot for this key, or -slot-1 if not found
    `int` | `getSlot​(int key)` | (internal) Returns the slot for this key
    `int` | `hash​(int key)` | (internal) Return the hash for the key.
    `int` | `put​(int key)` | Puts this integer (key) in the set, and returns the slot index it was added to.
    `long` | `ramBytesUsed()` | Return the memory footprint of this class in bytes.
    `void` | `rehash()` | (internal) Rehashes by doubling `int[] key` and filling with the old values.
    `int` | `size()` | The number of integers in this set.

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Field Detail

    - #### keys

          public int[] keys

      A power-of-2 over-sized array holding the integers in the set along with empty values.

    - #### count

          public int count

    - #### emptyVal

          public final int emptyVal

    - #### rehashCount

          public int rehashCount

      the count at which a rehash should be done

  - ### Constructor Detail

    - #### SentinelIntSet

          public SentinelIntSet​(int size,
                                int emptyVal)

      Parameters:
        `size` - The minimum number of elements this set should be able to hold without rehashing (i.e. the slots are guaranteed not to change)
        `emptyVal` - The integer value to use for EMPTY

  - ### Method Detail

    - #### clear

          public void clear()

    - #### hash

          public int hash​(int key)

      (internal) Return the hash for the key. The default implementation just returns the key, which is not appropriate for general purpose use.

    - #### size

          public int size()

      The number of integers in this set.

    - #### getSlot

          public int getSlot​(int key)

      (internal) Returns the slot for this key

    - #### find

          public int find​(int key)

      (internal) Returns the slot for this key, or -slot-1 if not found

    - #### exists

          public boolean exists​(int key)

      Does this set contain the specified integer?

    - #### put

          public int put​(int key)

      Puts this integer (key) in the set, and returns the slot index it was added to. It rehashes if adding it would make the set more than 75% full.

    - #### rehash

          public void rehash()

      (internal) Rehashes by doubling `int[] key` and filling with the old values.

    - #### ramBytesUsed

          public long ramBytesUsed()

      Return the memory footprint of this class in bytes.