boolean notSimilarTo(Nodes other, final NodeStateCmp nodeStateCmp) {
            // TODO verify behavior of C++ impl against this
            if (logicalNodeCount != other.logicalNodeCount) return true;
            if (type != other.type) return true;
            if ( ! upNodes.equals(other.upNodes)) return true;
            for (Integer node : unionNodeSetWith(other.nodeStates.keySet())) {
                final NodeState lhs = nodeStates.get(node);
                final NodeState rhs = other.nodeStates.get(node);
                if (!nodeStateCmp.similar(type, lhs, rhs)) {
                    return true;
                }
            }
            return false;
        }
Maintains a bitset where all non-down nodes have a bit set. All nodes that differ from defaultUp
and defaultDown are stored explicitly in a hash map.
vdslib/src/main/java/com/yahoo/vdslib/state/ClusterState.java