waba.util
Class IntHashtable

java.lang.Object
  |
  +--waba.util.IntHashtable

public class IntHashtable
extends java.lang.Object

This class implements a hashtable, which maps keys to values. Both key and value must be int's.

If an error occurs, IntHashtable.NotFound is returned. it corresponds to the minimum negative value of an integer. So, this value (-2147483648) cannot be a key of this IntHashTable.

An instance of Hashtable has two parameters that affect its efficiency: its capacity and its load factor. The load factor should be between 0.0 and 1.0. When the number of entries in the hashtable exceeds the product of the load factor and the current capacity, the capacity is increased by calling the rehash method. Larger load factors use memory more efficiently, at the expense of larger expected time per lookup.

If many entries are to be made into a Hashtable, creating it with a sufficiently large capacity may allow the entries to be inserted more efficiently than letting it perform automatic rehashing as needed to grow the table.

This example creates a hashtable of numbers. It uses the names of the numbers as keys:

     IntHashtable numbers = new IntHashtable(10);
     numbers.put(1, 1000);
     numbers.put(2, 2000);
     numbers.put(3, 3000);
 

To retrieve a number, use the following code:

     int i = numbers.get(2);
     if (i != IntHashtable.INVALID) {
         // "two = " + i;
     }
 
Important notes (added by guich)

There are no default constructor to decrease memory usage. You must have an idea for the initial capacity.

thanks to Arthur van Hoff


Inner Class Summary
protected static class IntHashtable.Entry
          Hashtable collision list.
 
Field Summary
 int collisions
          Computes the number of collisions for a set of inserts.
protected  int count
          The total number of entries in the hash table.
static int INVALID
           
protected  float loadFactor
          The load factor for the hashtable.
protected  IntHashtable.Entry[] table
          The hash table data.
protected  int threshold
          Rehashes the table when count exceeds this threshold.
 
Constructor Summary
IntHashtable(DataStream ds)
          Deprecated. This constructor will be removed in the future. Grab the code and put it in your program.
IntHashtable(int initialCapacity)
          Constructs a new, empty hashtable with the specified initial capacity and default load factor of 0.75f.
IntHashtable(int initialCapacity, float loadFactor)
          Constructs a new, empty hashtable with the specified initial capacity and the specified load factor.
 
Method Summary
 void clear()
          Clears this hashtable so that it contains no keys.
 boolean exists(int key)
          Checks if the value with the specified key is mapped in this hashtable.
 int get(int key)
          Returns the value to which the specified key is mapped in this hashtable.
 IntVector getKeys()
          Return an IntVector of the keys in the IntHashtable.
 IntVector getValues()
          Return a Vector of the values in the Hashtable.
 int put(int key, int value)
          Maps the specified key to the specified value in this hashtable.
protected  void rehash()
          Rehashes the contents of the hashtable into a hashtable with a larger capacity.
 int remove(int key)
          Removes the key (and its corresponding value) from this hashtable.
 void saveTo(DataStream ds)
          Deprecated. This method will be removed in the future. Grab the code and put it in your program.
 int size()
          Returns the number of keys in this hashtable.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

INVALID

public static int INVALID

table

protected IntHashtable.Entry[] table
The hash table data.

count

protected transient int count
The total number of entries in the hash table.

threshold

protected int threshold
Rehashes the table when count exceeds this threshold.

loadFactor

protected float loadFactor
The load factor for the hashtable.

collisions

public int collisions
Computes the number of collisions for a set of inserts. You must zero this each time you want to compute it. Here's a sample of how to determine the best values. Keep in mind that the lower collisions is better, but don't waste too much memory if its too high.
 int max = 0xFFFFFFF;
 for (int h = 5; ; h++)
 {
    IntHashtable ht = new IntHashtable(h);
    ht.put("nbsp".hashCode(),' ');
    ht.put("shy".hashCode(),'­');
    ht.put("quot".hashCode(),'"');
    ...
    if (ht.collisions < max)
    {
       Vm.debug("h: "+h+" colli: "+ht.collisions);
       max = ht.collisions;
       if (max == 0)
          break;
    }
 }
 
Since:
SuperWaba 5.71.
Constructor Detail

IntHashtable

public IntHashtable(DataStream ds)
Deprecated. This constructor will be removed in the future. Grab the code and put it in your program.

Reconstructs a previously saved IntHashtable, reading it from the given Stream. Note that the Hashtable may change the order of the entries, since the keys will be inserted in different order. The IntHashtable must be saved with the method saveTo.

IntHashtable

public IntHashtable(int initialCapacity)
Constructs a new, empty hashtable with the specified initial capacity and default load factor of 0.75f.
Parameters:
initialCapacity - the initial capacity of the hashtable.

IntHashtable

public IntHashtable(int initialCapacity,
                    float loadFactor)
Constructs a new, empty hashtable with the specified initial capacity and the specified load factor. If initialCapacity is zero, it is changed to 5.
Parameters:
initialCapacity - the initial capacity of the hashtable.
loadFactor - a number between 0.0 and 1.0.
Method Detail

clear

public void clear()
Clears this hashtable so that it contains no keys.

get

public int get(int key)
        throws ElementNotFoundError
Returns the value to which the specified key is mapped in this hashtable.
Parameters:
key - a key in the hashtable.
Returns:
the value to which the key is mapped in this hashtable; INVALID if the key is not mapped to any value in this hashtable.
Throws:
ElementNotFoundError - Starting in SuperWaba version 5.8, this method can throw an ElementNotFoundError when the key was not found and Settings.useExceptions is set to true.

exists

public boolean exists(int key)
Checks if the value with the specified key is mapped in this hashtable.
Parameters:
key - a key in the hashtable.
Returns:
True if the key exists, false otherwise.
Since:
SuperWaba 5.8

getValues

public IntVector getValues()
Return a Vector of the values in the Hashtable.
Since:
SuperWaba 5.11

getKeys

public IntVector getKeys()
Return an IntVector of the keys in the IntHashtable. Added ds@120. corrected by dgecawich@200

put

public int put(int key,
               int value)
Maps the specified key to the specified value in this hashtable. Neither the key nor the value can be INVALID.

The value can be retrieved by calling the get method with a key that is equal to the original key.

Note: putting an INVALID key or value returns immediately.

Parameters:
key - the hashtable key.
value - the value.
Returns:
the previous value of the specified key in this hashtable, or IntHashtable.INVALID if it did not have one.
See Also:
Object.equals(java.lang.Object)

rehash

protected void rehash()
Rehashes the contents of the hashtable into a hashtable with a larger capacity. This method is called automatically when the number of keys in the hashtable exceeds this hashtable's capacity and load factor.

remove

public int remove(int key)
           throws ElementNotFoundError
Removes the key (and its corresponding value) from this hashtable. This method does nothing if the key is not in the hashtable.
Parameters:
key - the key that needs to be removed.
Returns:
the value to which the key had been mapped in this hashtable, or INVALID if the key did not have a mapping.
Throws:
ElementNotFoundError - Starting in SuperWaba version 5.8, this method can throw an ElementNotFoundError when the key was not found and Settings.useExceptions is set to true.

size

public int size()
Returns the number of keys in this hashtable.
Returns:
the number of keys in this hashtable.

saveTo

public void saveTo(DataStream ds)
Deprecated. This method will be removed in the future. Grab the code and put it in your program.

Saves this IntHashtable to a Stream. Use the constructor IntHashtable(DataStream ds) to reconstruct the saved IntHashtable.
Since:
SuperWaba2.0beta4