Class TObjectHash<T>

    • Field Detail

      • _set

        public transient Object[] _set
        the set of Objects
      • REMOVED

        public static final Object REMOVED
      • FREE

        public static final Object FREE
      • consumeFreeSlot

        protected boolean consumeFreeSlot
        Indicates whether the last insertKey() call used a FREE slot. This field should be inspected right after call insertKey()
    • Constructor Detail

      • TObjectHash

        public TObjectHash()
        Creates a new TObjectHash instance with the default capacity and load factor.
      • TObjectHash

        public TObjectHash(int initialCapacity)
        Creates a new TObjectHash instance whose capacity is the next highest prime above initialCapacity + 1 unless that value is already prime.
        Parameters:
        initialCapacity - an int value
      • TObjectHash

        public TObjectHash(int initialCapacity,
                           float loadFactor)
        Creates a new TObjectHash instance with a prime value at or near the specified capacity and load factor.
        Parameters:
        initialCapacity - used to find a prime capacity for the table.
        loadFactor - used to calculate the threshold over which rehashing takes place.
    • Method Detail

      • capacity

        public int capacity()
        Specified by:
        capacity in class  THash
        Returns:
        the current physical capacity of the hash table.
      • removeAt

        protected void removeAt(int index)
        Description copied from class: THash
        Delete the record at index. Reduces the size of the collection by one.
        Overrides:
        removeAt in class  THash
        Parameters:
        index - an int value
      • setUp

        public int setUp(int initialCapacity)
        initializes the Object set of this hash table.
        Overrides:
        setUp in class  THash
        Parameters:
        initialCapacity - an int value
        Returns:
        an int value
      • forEach

        public boolean forEach(TObjectProcedure<? super T> procedure)
        Executes procedure for each element in the set.
        Parameters:
        procedure - a TObjectProcedure value
        Returns:
        false if the loop over the set terminated because the procedure returned false for some value.
      • contains

        public boolean contains(Object obj)
        Searches the set for obj
        Parameters:
        obj - an Object value
        Returns:
        a boolean value
      • index

        protected int index(Object obj)
        Locates the index of obj.
        Parameters:
        obj - an Object value
        Returns:
        the index of obj or -1 if it isn't in the set.
      • insertionIndex

        @Deprecated
        protected int insertionIndex(T obj)
        Deprecated.  use insertKey(T) instead
        Alias introduced to avoid breaking the API. The new method name insertKey() reflects the changes made to the logic.
        Parameters:
        obj -
        Returns:
      • insertKey

        protected int insertKey(T key)
        Locates the index at which key can be inserted. if there is already a value equal()ing key in the set, returns that value's index as -index - 1.

        If a slot is found the value is inserted. When a FREE slot is used the consumeFreeSlot field is set to true. This field should be used in the method invoking insertKey() to pass to postInsertHook()
        Parameters:
        key - an Object value
        Returns:
        the index of a FREE slot at which key can be inserted or, if key is already stored in the hash, the negative value of that index, minus 1: -index -1.
      • throwObjectContractViolation

        protected final void throwObjectContractViolation(Object o1,
                                                          Object o2)
                                                   throws IllegalArgumentException
        Convenience methods for subclasses to use in throwing exceptions about badly behaved user objects employed as keys. We have to throw an IllegalArgumentException with a rather verbose message telling the user that they need to fix their object implementation to conform to the general contract for java.lang.Object.
        Parameters:
        o1 - the first of the equal elements with unequal hash codes.
        o2 - the second of the equal elements with unequal hash codes.
        Throws:
        IllegalArgumentException - the whole point of this method.
      • throwObjectContractViolation

        protected final void throwObjectContractViolation(Object o1,
                                                          Object o2,
                                                          int size,
                                                          int oldSize,
                                                          Object[] oldKeys)
                                                   throws IllegalArgumentException
        Convenience methods for subclasses to use in throwing exceptions about badly behaved user objects employed as keys. We have to throw an IllegalArgumentException with a rather verbose message telling the user that they need to fix their object implementation to conform to the general contract for java.lang.Object.
        Parameters:
        o1 - the first of the equal elements with unequal hash codes.
        o2 - the second of the equal elements with unequal hash codes.
        size -
        oldSize -
        oldKeys - @throws IllegalArgumentException the whole point of this method.
        Throws:
        IllegalArgumentException
      • buildObjectContractViolation

        protected final IllegalArgumentException buildObjectContractViolation(Object o1,
                                                                              Object o2,
                                                                              String extra)
        Convenience methods for subclasses to use in throwing exceptions about badly behaved user objects employed as keys. We have to throw an IllegalArgumentException with a rather verbose message telling the user that they need to fix their object implementation to conform to the general contract for java.lang.Object.
        Parameters:
        o1 - the first of the equal elements with unequal hash codes.
        o2 - the second of the equal elements with unequal hash codes.
        Throws:
        IllegalArgumentException - the whole point of this method.
      • equals

        protected boolean equals(Object notnull,
                                 Object two)
      • hash

        protected int hash(Object notnull)
      • reportPotentialConcurrentMod

        protected static String reportPotentialConcurrentMod(int newSize,
                                                             int oldSize)
      • dumpExtraInfo

        protected String dumpExtraInfo(Object newVal,
                                       Object oldVal,
                                       int currentSize,
                                       int oldSize,
                                       Object[] oldKeys)
        Parameters:
        newVal - the key being inserted
        oldVal - the key already stored at that position
        currentSize - size of the key set during rehashing
        oldSize - size of the key set before rehashing
        oldKeys - the old key set