Class Hashtable

  • Direct Known Subclasses:
    AttributeList

    public class Hashtable
    extends java.lang.Object
    This class implements a hash table, 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(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 class  Hashtable.Entry
      Hashtable collision list.
    • Field Summary

      Fields 
      Modifier and Type Field Description
      boolean allowDuplicateKeys
      Setting this to true will allow the hashtable to have more than one key with the same value.
      int collisions
      Computes the number of collisions for a set of inserts.
      protected Hashtable.Entry[] table
      The 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
      void clear()
      Clears this hashtable so that it contains no keys.
      void copyInto​(Hashtable target)
      Copies the keys and values of this Hashtable into the given Hashtable.
      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.
      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​(int hash, java.lang.Object defaultValue)
      Returns the value to which the specified key 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.
      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.
      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.
      java.lang.String getString​(java.lang.Object key)
      Returns the value to which the specified key is mapped in this hashtable as a String.
      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.
      Vector getValues()
      Return a Vector of the values in the Hashtable.
      java.lang.Object put​(int hash, java.lang.Object value)
      Maps the specified key to the specified value in this 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​(int hash)
      Removes the key (and its corresponding value) from this hashtable.
      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.
      • 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:
        1. An Object array (Object[]). In this case, the number of keys and values must match.
        2. A single Object. This object is set as value to all keys.
        The values parameter cannot be null.
        Since:
        TotalCross 1.5
    • 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; null if 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; null if 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; defaultValue if 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; defaultValue if 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; defaultValue if 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; null if 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
      • 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
      • 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 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)
      • put

        public java.lang.Object put​(int hash,
                                    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.

        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 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)
        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.
      • 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 null if 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 to
        keyvalueSeparator - 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