Implement hash-table in C++
<p>The following is the implementation of hashtable using C++. Can you please help me to understand what <code>HashEntry **table</code> is? Why it is declared as a double pointer? Is it a array and each value of the array is <code>HashEntry</code>?</p>

<pre><code>  class HashEntry {
    private:
          int key;
          int value;
    public:
          HashEntry(int key, int value) {
                this-&gt;key = key;
                this-&gt;value = value;
          }

          int getKey() {
                return key;
          }

          int getValue() {
                return value;
          }
    };

    const int TABLE_SIZE = 128;






    class HashMap {
    private:
          HashEntry **table;
    public:
          HashMap() {
                table = new HashEntry*[TABLE_SIZE];
                for (int i = 0; i &lt; TABLE_SIZE; i++)
                      table[i] = NULL;
          }

          int get(int key) {
                int hash = (key % TABLE_SIZE);
                while (table[hash] != NULL &amp;&amp; table[hash]-&gt;getKey() != key)
                      hash = (hash + 1) % TABLE_SIZE;
                if (table[hash] == NULL)
                      return -1;
                else
                      return table[hash]-&gt;getValue();
          }

          void put(int key, int value) {
                int hash = (key % TABLE_SIZE);
                while (table[hash] != NULL &amp;&amp; table[hash]-&gt;getKey() != key)
                      hash = (hash + 1) % TABLE_SIZE;
                if (table[hash] != NULL)
                      delete table[hash];
                table[hash] = new HashEntry(key, value);
          }     

          ~HashMap() {
                for (int i = 0; i &lt; TABLE_SIZE; i++)
                      if (table[i] != NULL)
                            delete table[i];
                delete[] table;
          }
    };
</code></pre>