freaklamarsch.util
Class FLMHashMap

java.lang.Object
  |
  +--freaklamarsch.util.FLMHashMap

public class FLMHashMap
extends java.lang.Object


Nested Class Summary
(package private) static class FLMHashMap.Entry
          Returns a shallow copy of this HashMap instance: the keys and values themselves are not cloned.
 
Field Summary
(package private) static int DEFAULT_INITIAL_CAPACITY
          The default initial capacity - MUST be a power of two.
(package private) static float DEFAULT_LOAD_FACTOR
          The load fast used when none specified in constructor.
(package private)  float loadFactor
          The load factor for the hash table.
(package private) static int MAXIMUM_CAPACITY
          The maximum capacity, used if a higher value is implicitly specified by either of the constructors with arguments.
(package private) static java.lang.Object NULL_KEY
          Value representing null keys inside tables.
(package private)  int size
          The number of key-value mappings contained in this identity hash map.
(package private)  FLMHashMap.Entry[] table
          The table, resized as necessary.
(package private)  int threshold
          The next size value at which to resize (capacity * load factor).
 
Constructor Summary
FLMHashMap()
          Constructs an empty HashMap with the default initial capacity (16) and the default load factor (0.75).
FLMHashMap(int initialCapacity)
          Constructs an empty HashMap with the specified initial capacity and the default load factor (0.75).
FLMHashMap(int initialCapacity, float loadFactor)
          Constructs an empty HashMap with the specified initial capacity and load factor.
 
Method Summary
(package private)  void addEntry(int hash, java.lang.Object key, java.lang.Object value, int bucketIndex)
          Add a new entry with the specified key, value and hash code to the specified bucket.
 void clear()
          Removes all mappings from this map.
(package private)  void createEntry(int hash, java.lang.Object key, java.lang.Object value, int bucketIndex)
          Like addEntry except that this version is used when creating entries as part of Map construction or "pseudo-construction" (cloning, deserialization).
(package private)  boolean eq(java.lang.Object x, java.lang.Object y)
          Check for equality of non-null reference x and possibly-null y.
 java.lang.Object get(java.lang.Object key)
          Returns the value to which the specified key is mapped in this identity hash map, or null if the map contains no mapping for this key.
(package private)  int hash(java.lang.Object x)
          Returns a hash code for non-null Object x.
(package private) static int indexFor(int h, int length)
          Returns index for hash code h.
(package private)  void init()
          Initialization hook for subclasses.
 boolean isEmpty()
          Returns true if this map contains no key-value mappings.
(package private) static java.lang.Object maskNull(java.lang.Object key)
          Returns internal representation for key.
 java.lang.Object put(java.lang.Object key, java.lang.Object value)
          Associates the specified value with the specified key in this map.
 java.lang.Object remove(java.lang.Object key)
          Removes the mapping for this key from this map if present.
(package private)  FLMHashMap.Entry removeEntryForKey(java.lang.Object key)
          Removes and returns the entry associated with the specified key in the HashMap.
(package private)  void resize(int newCapacity)
          Rehashes the contents of this map into a new HashMap instance with a larger capacity.
 int size()
          Returns the number of key-value mappings in this map.
(package private)  void transfer(FLMHashMap.Entry[] newTable)
          Transfer all entries from current table to newTable.
(package private) static java.lang.Object unmaskNull(java.lang.Object key)
          Returns key represented by specified internal representation.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

DEFAULT_INITIAL_CAPACITY

static final int DEFAULT_INITIAL_CAPACITY
The default initial capacity - MUST be a power of two.

See Also:
Constant Field Values

MAXIMUM_CAPACITY

static final int MAXIMUM_CAPACITY
The maximum capacity, used if a higher value is implicitly specified by either of the constructors with arguments. MUST be a power of two <= 1<<30.

See Also:
Constant Field Values

DEFAULT_LOAD_FACTOR

static final float DEFAULT_LOAD_FACTOR
The load fast used when none specified in constructor.

See Also:
Constant Field Values

table

FLMHashMap.Entry[] table
The table, resized as necessary. Length MUST Always be a power of two.


size

int size
The number of key-value mappings contained in this identity hash map.


threshold

int threshold
The next size value at which to resize (capacity * load factor).


loadFactor

float loadFactor
The load factor for the hash table.


NULL_KEY

static final java.lang.Object NULL_KEY
Value representing null keys inside tables.

Constructor Detail

FLMHashMap

public FLMHashMap(int initialCapacity,
                  float loadFactor)
Constructs an empty HashMap with the specified initial capacity and load factor.

Parameters:
initialCapacity - The initial capacity.
loadFactor - The load factor.
Throws:
java.lang.IllegalArgumentException - if the initial capacity is negative or the load factor is nonpositive.

FLMHashMap

public FLMHashMap(int initialCapacity)
Constructs an empty HashMap with the specified initial capacity and the default load factor (0.75).

Parameters:
initialCapacity - the initial capacity.
Throws:
java.lang.IllegalArgumentException - if the initial capacity is negative.

FLMHashMap

public FLMHashMap()
Constructs an empty HashMap with the default initial capacity (16) and the default load factor (0.75).

Method Detail

init

void init()
Initialization hook for subclasses. This method is called in all constructors and pseudo-constructors (clone, readObject) after HashMap has been initialized but before any entries have been inserted. (In the absence of this method, readObject would require explicit knowledge of subclasses.)


maskNull

static java.lang.Object maskNull(java.lang.Object key)
Returns internal representation for key. Use NULL_KEY if key is null.


unmaskNull

static java.lang.Object unmaskNull(java.lang.Object key)
Returns key represented by specified internal representation.


hash

int hash(java.lang.Object x)
Returns a hash code for non-null Object x.


eq

boolean eq(java.lang.Object x,
           java.lang.Object y)
Check for equality of non-null reference x and possibly-null y.


indexFor

static int indexFor(int h,
                    int length)
Returns index for hash code h.


size

public int size()
Returns the number of key-value mappings in this map.

Returns:
the number of key-value mappings in this map.

isEmpty

public boolean isEmpty()
Returns true if this map contains no key-value mappings.

Returns:
true if this map contains no key-value mappings.

get

public java.lang.Object get(java.lang.Object key)
Returns the value to which the specified key is mapped in this identity hash map, or null if the map contains no mapping for this key. A return value of null does not necessarily indicate that the map contains no mapping for the key; it is also possible that the map explicitly maps the key to null. The containsKey method may be used to distinguish these two cases.

Parameters:
key - the key whose associated value is to be returned.
Returns:
the value to which this map maps the specified key, or null if the map contains no mapping for this key.
See Also:
put(Object, Object)

put

public java.lang.Object put(java.lang.Object key,
                            java.lang.Object value)
Associates the specified value with the specified key in this map. If the map previously contained a mapping for this key, the old value is replaced.

Parameters:
key - key with which the specified value is to be associated.
value - value to be associated with the specified key.
Returns:
previous value associated with specified key, or null if there was no mapping for key. A null return can also indicate that the HashMap previously associated null with the specified key.

resize

void resize(int newCapacity)
Rehashes the contents of this map into a new HashMap instance with a larger capacity. This method is called automatically when the number of keys in this map exceeds its capacity and load factor.

Parameters:
newCapacity - the new capacity, MUST be a power of two.

transfer

void transfer(FLMHashMap.Entry[] newTable)
Transfer all entries from current table to newTable.


remove

public java.lang.Object remove(java.lang.Object key)
Removes the mapping for this key from this map if present.

Parameters:
key - key whose mapping is to be removed from the map.
Returns:
previous value associated with specified key, or null if there was no mapping for key. A null return can also indicate that the map previously associated null with the specified key.

removeEntryForKey

FLMHashMap.Entry removeEntryForKey(java.lang.Object key)
Removes and returns the entry associated with the specified key in the HashMap. Returns null if the HashMap contains no mapping for this key.


clear

public void clear()
Removes all mappings from this map.


addEntry

void addEntry(int hash,
              java.lang.Object key,
              java.lang.Object value,
              int bucketIndex)
Add a new entry with the specified key, value and hash code to the specified bucket. It is the responsibility of this method to resize the table if appropriate. Subclass overrides this to alter the behavior of put method.


createEntry

void createEntry(int hash,
                 java.lang.Object key,
                 java.lang.Object value,
                 int bucketIndex)
Like addEntry except that this version is used when creating entries as part of Map construction or "pseudo-construction" (cloning, deserialization). This version needn't worry about resizing the table. Subclass overrides this to alter the behavior of HashMap(Map), clone, and readObject.