Class TObjectHash<T>

    • Field Detail

      • _set

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

        public static final java.lang.Object REMOVED
      • FREE

        public static final java.lang.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​(java.lang.Object obj)
        Searches the set for obj
        Parameters:
        obj - an Object value
        Returns:
        a boolean value
      • index

        protected int index​(java.lang.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 -
      • 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​(java.lang.Object o1,
                                                          java.lang.Object o2)
                                                   throws java.lang.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:
        java.lang.IllegalArgumentException - the whole point of this method.
      • throwObjectContractViolation

        protected final void throwObjectContractViolation​(java.lang.Object o1,
                                                          java.lang.Object o2,
                                                          int size,
                                                          int oldSize,
                                                          java.lang.Object[] oldKeys)
                                                   throws java.lang.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:
        java.lang.IllegalArgumentException - the whole point of this method.
      • buildObjectContractViolation

        protected final java.lang.IllegalArgumentException buildObjectContractViolation​(java.lang.Object o1,
                                                                                        java.lang.Object o2,
                                                                                        java.lang.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:
        java.lang.IllegalArgumentException - the whole point of this method.
      • equals

        protected boolean equals​(java.lang.Object notnull,
                                 java.lang.Object two)
      • hash

        protected int hash​(java.lang.Object notnull)
      • reportPotentialConcurrentMod

        protected static java.lang.String reportPotentialConcurrentMod​(int newSize,
                                                                       int oldSize)
      • dumpExtraInfo

        protected java.lang.String dumpExtraInfo​(java.lang.Object newVal,
                                                 java.lang.Object oldVal,
                                                 int currentSize,
                                                 int oldSize,
                                                 java.lang.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
      • objectInfo

        protected static java.lang.String objectInfo​(java.lang.Object o)
      • writeExternal

        public void writeExternal​(java.io.ObjectOutput out)
                           throws java.io.IOException
        Specified by:
        writeExternal in interface java.io.Externalizable
        Overrides:
        writeExternal in class THash
        Throws:
        java.io.IOException
      • readExternal

        public void readExternal​(java.io.ObjectInput in)
                          throws java.io.IOException,
                                 java.lang.ClassNotFoundException
        Specified by:
        readExternal in interface java.io.Externalizable
        Overrides:
        readExternal in class THash
        Throws:
        java.io.IOException
        java.lang.ClassNotFoundException