public class StringIntHashMap
extends java.lang.Object
String
values as keys mapped to primitive
int
values. This implementation is unsynchronized in order to
provide the best possible performance for typical usage scenarios, so
explicit synchronization must be implemented by a wrapper class or directly
by the application in cases where instances are modified in a multithreaded
environment. The map implementation is not very efficient when resizing, but
works well when the size of the map is known in advance.Modifier and Type | Field and Description |
---|---|
protected static double |
DEFAULT_FILL
Default fill fraction allowed before growing table.
|
static int |
DEFAULT_NOT_FOUND
Default value returned when key not found in table.
|
protected int |
m_arraySize
Size of array used for keys.
|
protected int |
m_entryCount
Number of entries present in table.
|
protected int |
m_entryLimit
Entries allowed before growing table.
|
protected double |
m_fillFraction
Fill fraction allowed for this hash table.
|
protected int |
m_hitOffset
Offset added (modulo table size) to slot number on collision.
|
protected java.lang.String[] |
m_keyTable
Array of key table slots.
|
protected int |
m_notFoundValue
Value returned when key not found in table.
|
protected int[] |
m_valueTable
Array of value table slots.
|
protected static int |
MINIMUM_SIZE
Minimum size used for hash table.
|
Constructor and Description |
---|
StringIntHashMap()
Default constructor.
|
StringIntHashMap(int count)
Constructor with only size supplied.
|
StringIntHashMap(int count,
double fill)
Constructor with size and fill fraction specified.
|
StringIntHashMap(int count,
double fill,
int miss)
Constructor with full specification.
|
StringIntHashMap(StringIntHashMap base)
Copy (clone) constructor.
|
Modifier and Type | Method and Description |
---|---|
int |
add(java.lang.String key,
int value)
Add an entry to the table.
|
private int |
assignSlot(java.lang.String key,
int value)
Assign slot for entry.
|
java.lang.Object |
clone()
Construct a copy of the table.
|
boolean |
containsKey(java.lang.String key)
Check if an entry is present in the table.
|
private int |
freeSlot(int slot)
Find free slot number for entry.
|
int |
get(java.lang.String key)
Find an entry in the table.
|
protected void |
internalRemove(int slot)
Internal remove pair from the table.
|
private boolean |
reinsert(int slot)
Reinsert an entry into the hash map.
|
int |
remove(java.lang.String key)
Remove an entry from the table.
|
private void |
restructure(java.lang.String[] keys,
int[] values)
Restructure the table.
|
private int |
standardFind(java.lang.Object key)
Standard find key in table.
|
private int |
standardSlot(java.lang.Object key)
Standard base slot computation for a key.
|
private int |
stepSlot(int slot)
Step the slot number for an entry.
|
public static final int DEFAULT_NOT_FOUND
protected static final double DEFAULT_FILL
protected static final int MINIMUM_SIZE
protected final double m_fillFraction
protected int m_entryCount
protected int m_entryLimit
protected int m_arraySize
protected int m_hitOffset
protected java.lang.String[] m_keyTable
protected int[] m_valueTable
protected int m_notFoundValue
public StringIntHashMap(int count, double fill, int miss)
count
- number of values to assume in initial sizing of tablefill
- fraction full allowed for table before growingmiss
- value returned when key not found in tablepublic StringIntHashMap(int count, double fill)
count
- number of values to assume in initial sizing of tablefill
- fraction full allowed for table before growingpublic StringIntHashMap(int count)
count
- number of values to assume in initial sizing of tablepublic StringIntHashMap()
public StringIntHashMap(StringIntHashMap base)
base
- instance being copiedprivate final int stepSlot(int slot)
slot
- slot number to be steppedprivate final int freeSlot(int slot)
slot
- initial slot computed from keyprivate final int standardSlot(java.lang.Object key)
key
- key value to be computedprivate int standardFind(java.lang.Object key)
hashCode()
method defined for the
key objects or the System.identityHashCode()
method, and
either the equals()
method defined for the key objects or
the ==
operator, as selected by the hash technique
constructor parameter. To implement a hash class based on some other
methods of hashing and/or equality testing, define a separate method in
the subclass with a different name and use that method instead. This
avoids the overhead caused by overrides of a very heavily used method.key
- to be found in table-index-1
of slot to be
used for inserting key in table if not already present (always negative)private boolean reinsert(int slot)
slot
- position of entry to be reinserted into hash maptrue
if the slot number used by the entry has has
changed, false
if notprotected void internalRemove(int slot)
null
and adjusting the count
present, then chains through the table to reinsert any other pairs
which may have collided with the removed pair. If the associated value
is an object reference, it should be set to null
before
this method is called.slot
- index number of pair to be removedprivate void restructure(java.lang.String[] keys, int[] values)
keys
- array of keysvalues
- array of valuesprivate int assignSlot(java.lang.String key, int value)
key
- to be added to tablevalue
- associated value for keypublic int add(java.lang.String key, int value)
key
- key to be added to table (non- null
)value
- associated value for keypublic final boolean containsKey(java.lang.String key)
key
- key for entry to be foundtrue
if key found in table, false
if notpublic final int get(java.lang.String key)
key
- key for entry to be returnedpublic int remove(java.lang.String key)
key
- key to be removed from tablepublic java.lang.Object clone()
clone
in class java.lang.Object