private GroupNode<K, V> getGroupNodeInstance( G group ) {
        GroupNode<K, V>[] buckets = mGroupBuckets;
        final int         hash    = (group == null ? 0 : rehash( group.hashCode() ));
        final int         idx     = hash & (buckets.length - 1);

        GroupNode<K, V> g = buckets[idx];
        while( g != null ) {
            if( hash == g.mHash && (group == g.mGroup || group != null && group.equals( g.mGroup )) ) { return g; }

            g = g.mNext;
        }

        g = new GroupNode<K, V>( group, hash, buckets[idx] );
        buckets[idx] = g;

        if( mGroupCount++ >= mGroupThreshold ) { resizeGroups( 2 * buckets.length ); }

        return g;
    }