waba.util
Class Hashtable

java.lang.Object
  |
  +--waba.util.Hashtable
Direct Known Subclasses:
AttributeList

public class Hashtable
extends java.lang.Object

This class implements a hashtable, which maps keys to values. Any non-null object can be used as a key or as a value.

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:

     Hashtable numbers = new Hashtable(10);
     numbers.put("one", Convert.toString(1));
     numbers.put("two", Convert.toString(2));
     numbers.put("three", Convert.toString(3));
 

To retrieve a number, use the following code:

     String n = (String)numbers.get("two");
     if (n != null) {
         // "two = " + Convert.toInt(n);
     }
 
Important notes (added by guich)

There are no default constructor to decrease memory usage. Also,

thanks to Arthur van Hoff


Field Summary
 int collisions
          Computes the number of collisions for a set of inserts.
 
Constructor Summary
Hashtable(int initialCapacity)
          Constructs a new, empty hashtable with the specified initial capacity and default load factor of 0.75f.
Hashtable(int initialCapacity, float loadFactor)
          Constructs a new, empty hashtable with the specified initial capacity and the specified load factor.
Hashtable(java.lang.String res)
          Constructs a new hashtable, parsing the elements from the given String.
 
Method Summary
 void clear()
          Clears this hashtable so that it contains no keys.
 boolean exists(java.lang.Object key)
          Checks if the value with the specified key is mapped in this hashtable.
 java.lang.Object get(int hash)
          Returns the value to which the specified hash is mapped in this hashtable.
 java.lang.Object get(java.lang.Object key)
          Returns the value to which the specified key is mapped in this hashtable.
 Vector getKeys()
          Return a Vector of the keys in the Hashtable.
 Vector getKeyValuePairs(java.lang.String separator)
          Return a Vector with pairs in the form key=value from the Hashtable.
 Vector getValues()
          Return a Vector of the values in the Hashtable.
 java.lang.Object put(java.lang.Object key, java.lang.Object 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.
 java.lang.Object remove(java.lang.Object key)
          Removes the key (and its corresponding value) from this hashtable.
 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

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

Hashtable

public Hashtable(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.

Hashtable

public Hashtable(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.

Hashtable

public Hashtable(java.lang.String res)
Constructs a new hashtable, parsing the elements from the given String. Each string must be in the form: key = value, splitted in lines. This aids the task of creating resource bundles to add localization to your application.
You can include txt files in your application's pdb file using /t, where each txt will hold the strings for a language. For example:
 // save these two lines in a file named EN.txt:
 Message = Message
 TestMsg = This is a test
 Exit = Exit
 // save these other two in a file named PT.txt:
 Message = Mensagem
 TestMsg = Isso é um teste
 Exit = Sair
 
Then, call java.tools.Warp passing /T as parameter, so that these two files are included inside of the PDB.
Now, when your program starts, you can do:
 String txt = idiom == EN ? "EN.txt" : "PT.txt"; 
 byte[] b = Vm.getFile(txt);
 Hashtable res = new Hashtable(new String(b,0,b.length));
 new MessageBox(res.get("Message"), res.get("TestMsg"), new String[]{res.get("Exit")}).popupModal();
 
Note that the keys are case sensitive, and that all strings are trimmed.
Since:
SuperWaba 5.72
Method Detail

clear

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

get

public java.lang.Object get(java.lang.Object 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; null 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.

get

public java.lang.Object get(int hash)
                     throws ElementNotFoundError
Returns the value to which the specified hash is mapped in this hashtable.

Caution: since you're passing an integer instead of an object, if there are two objects that map to the same key, this method will always return the first one only.

Parameters:
hash - The key hash in the hashtable.
Returns:
the value to which the key is mapped in this hashtable; null 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(java.lang.Object 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

getKeys

public Vector getKeys()
Return a Vector of the keys in the Hashtable. The order is the same of the getValues method. Added ds@120. corrected by dgecawich@200

getValues

public Vector getValues()
Return a Vector of the values in the Hashtable. The order is the same of the getKeys method.
Since:
SuperWaba 5.1

getKeyValuePairs

public Vector getKeyValuePairs(java.lang.String separator)
Return a Vector with pairs in the form key=value from the Hashtable. Each vector's element can safely be casted to a String.
Parameters:
separator - the separator between the key and the value. Should be ": ","=", etc.
Since:
SuperWaba 5.1

put

public java.lang.Object put(java.lang.Object key,
                            java.lang.Object value)
Maps the specified key to the specified value in this hashtable. Neither the key nor the value can be null.

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

Parameters:
key - the hashtable key.
value - the value.
Returns:
the previous value of the specified key in this hashtable, or null 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 java.lang.Object remove(java.lang.Object 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 null 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.