Class Hashtable
- java.lang.Object
-
- totalcross.util.Hashtable
-
- Direct Known Subclasses:
AttributeList
public class Hashtable extends java.lang.ObjectThis class implements a hash table, which maps keys to values. Any non-nullobject can be used as a key or as a value.An instance of
Hashtablehas 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 therehashmethod. 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(3); 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);This Hashtable class does not support Generics; use the HashMap class instead.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description protected static classHashtable.EntryHashtable collision list.
-
Field Summary
Fields Modifier and Type Field Description booleanallowDuplicateKeysSetting this to true will allow the hashtable to have more than one key with the same value.intcollisionsComputes the number of collisions for a set of inserts.protected Hashtable.Entry[]tableThe hash table data.
-
Constructor Summary
Constructors Constructor Description Hashtable(int initialCapacity)Constructs a new, empty hashtable with the specified initial capacity and default load factor of 0.75f.Hashtable(int initialCapacity, double loadFactor)Constructs a new, empty hashtable with the specified initial capacity and the specified load factor.Hashtable(java.lang.Object[] keys, java.lang.Object values)Creates a Hashtable with the given keys and values.Hashtable(java.lang.String res)Constructs a new hashtable, parsing the elements from the given String.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description voidclear()Clears this hashtable so that it contains no keys.voidcopyInto(Hashtable target)Copies the keys and values of this Hashtable into the given Hashtable.java.lang.StringBufferdumpKeysValues(java.lang.StringBuffer sb, java.lang.String keyvalueSeparator, java.lang.String lineSeparator)Dumps the keys and values into the given StringBuffer.booleanexists(java.lang.Object key)Checks if the value with the specified key is mapped in this hashtable.java.lang.Objectget(int hash)Returns the value to which the specified hash is mapped in this hashtable.java.lang.Objectget(int hash, java.lang.Object defaultValue)Returns the value to which the specified key is mapped in this hashtable.java.lang.Objectget(java.lang.Object key)Returns the value to which the specified key is mapped in this hashtable.java.lang.Objectget(java.lang.Object key, java.lang.Object defaultValue)Returns the value to which the specified key is mapped in this hashtable.VectorgetKeys()Return a Vector of the keys in the Hashtable.VectorgetKeyValuePairs(java.lang.String separator)Return a Vector with pairs in the formkey=valuefrom the Hashtable.java.lang.StringgetString(java.lang.Object key)Returns the value to which the specified key is mapped in this hashtable as a String.java.lang.StringgetString(java.lang.Object key, java.lang.String defaultValue)Returns the value to which the specified key is mapped in this hashtable as a String.VectorgetValues()Return a Vector of the values in the Hashtable.java.lang.Objectput(int hash, java.lang.Object value)Maps the specifiedkeyto the specifiedvaluein this hashtable.java.lang.Objectput(java.lang.Object key, java.lang.Object value)Maps the specifiedkeyto the specifiedvaluein this hashtable.protected voidrehash()Rehashes the contents of the hashtable into a hashtable with a larger capacity.java.lang.Objectremove(int hash)Removes the key (and its corresponding value) from this hashtable.java.lang.Objectremove(java.lang.Object key)Removes the key (and its corresponding value) from this hashtable.intsize()Returns the number of keys in this hashtable.
-
-
-
Field Detail
-
table
protected Hashtable.Entry[] table
The hash table data.
-
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.
-
allowDuplicateKeys
public boolean allowDuplicateKeys
Setting this to true will allow the hashtable to have more than one key with the same value. In this case, the methods will always return the first matching key.- Since:
- TotalCross 1.24
-
-
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 number of elements you think the hashtable will end with. The hashtable will grow if necessary, but using a number near or above the final size can improve performance.
-
Hashtable
public Hashtable(int initialCapacity, double 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 number of elements you think the hashtable will end with. The hashtable will grow if necessary, but using a number near or above the final size can improve performance.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
The TotalCross deployer will include the two files referenced below in the tcz file.
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")}).popupNonBlocking();Note that the keys are case sensitive, and that all strings are trimmed.- Since:
- SuperWaba 5.72
-
Hashtable
public Hashtable(java.lang.Object[] keys, java.lang.Object values)Creates a Hashtable with the given keys and values. The values can be two things:- An Object array (
Object[]). In this case, the number of keys and values must match. - A single Object. This object is set as value to all keys.
- Since:
- TotalCross 1.5
- An Object array (
-
-
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)
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;
nullif the key is not mapped to any value in this hashtable.
-
getString
public java.lang.String getString(java.lang.Object key)
Returns the value to which the specified key is mapped in this hashtable as a String. If the item is a String, a cast is made, otherwise, the toString method is called.- Parameters:
key- a key in the hashtable.- Returns:
- the value to which the key is mapped in this hashtable;
nullif the key is not mapped to any value in this hashtable. - Since:
- TotalCross 1.24
-
getString
public java.lang.String getString(java.lang.Object key, java.lang.String defaultValue)Returns the value to which the specified key is mapped in this hashtable as a String. If the item is a String, a cast is made, otherwise, the toString method is called.- Parameters:
key- a key in the hashtable.- Returns:
- the value to which the key is mapped in this hashtable;
defaultValueif the key is not mapped to any value in this hashtable. - Since:
- TotalCross 1.24
-
get
public java.lang.Object get(java.lang.Object key, java.lang.Object defaultValue)Returns the value to which the specified key is mapped in this hashtable.- Parameters:
key- a key in the hashtable.defaultValue- The default value to be returned if none is found.- Returns:
- the value to which the key is mapped in this hashtable;
defaultValueif the key is not mapped to any value in this hashtable. - Since:
- TotalCross 1.15
-
get
public java.lang.Object get(int hash, java.lang.Object defaultValue)Returns the value to which the specified key is mapped in this hashtable.- Parameters:
hash- The key hash in the hashtable.defaultValue- The default value to be returned if none is found.- Returns:
- the value to which the key is mapped in this hashtable;
defaultValueif the key is not mapped to any value in this hashtable. - Since:
- TotalCross 1.15
-
get
public java.lang.Object get(int hash)
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;
nullif the key is not mapped to any value in this hashtable.
-
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.- See Also:
getValues(),getKeyValuePairs(java.lang.String)
-
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
- See Also:
getKeys(),getKeyValuePairs(java.lang.String)
-
getKeyValuePairs
public Vector getKeyValuePairs(java.lang.String separator)
Return a Vector with pairs in the formkey=valuefrom 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
-
copyInto
public void copyInto(Hashtable target)
Copies the keys and values of this Hashtable into the given Hashtable. Note that the target Hashtable is not cleared; you should do that by yourself.- Since:
- TotalCross 1.15
-
put
public java.lang.Object put(java.lang.Object key, java.lang.Object value)Maps the specifiedkeyto the specifiedvaluein this hashtable. Neither the key nor the value can benull.The value can be retrieved by calling the
getmethod 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
nullif it did not have one. - See Also:
Object.equals(java.lang.Object)
-
put
public java.lang.Object put(int hash, java.lang.Object value)Maps the specifiedkeyto the specifiedvaluein this hashtable. Neither the key nor the value can benull.The value can be retrieved by calling the
getmethod with a key that is equal to the original key.This method receives a hashcode instead of the object. You MUST use the get(int) method to retrieve the value, otherwise you will get a NullPointerException, because no key is stored using this method.
- Parameters:
hash- the hashtable key's hash.value- the value.- Returns:
- the previous value of the specified key in this hashtable,
or
nullif 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)
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
nullif the key did not have a mapping.
-
remove
public java.lang.Object remove(int hash)
Removes the key (and its corresponding value) from this hashtable. This method does nothing if the key is not in the hashtable.- Parameters:
hash- the hash code of the key that needs to be removed.- Returns:
- the value to which the key had been mapped in this hashtable,
or
nullif the key did not have a mapping.
-
size
public int size()
Returns the number of keys in this hashtable.
-
dumpKeysValues
public java.lang.StringBuffer dumpKeysValues(java.lang.StringBuffer sb, java.lang.String keyvalueSeparator, java.lang.String lineSeparator)Dumps the keys and values into the given StringBuffer.- Parameters:
sb- The StringBuffer where the data will be dumped tokeyvalueSeparator- The separator between the key and the value (E.G.: ": ")lineSeparator- The separator placed after each key+value pair (E.G.: "\r\n"). The last separator is cut from the StringBuffer.- Since:
- TotalCross 1.23
-
-