@Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }

        if (getClass() != obj.getClass()) {
            return false;
        }

        HasherTable<K, V> h = (HasherTable<K, V>) obj;
        Set<Entry<K, V>> otherSet = h.entrySet();

        for (Entry<K, V> e : this.entrySet())
            if (!otherSet.contains(e))
                return false;

        return true;
    }