docs: @Override
     public DefaultConsistentHash updateMembers(DefaultConsistentHash baseCH, List<Address> actualMembers,
                                                Map<Address, Float> actualCapacityFactors) {
        if (actualMembers.size() == 0)
           throw new IllegalArgumentException("Can't construct a consistent hash without any members");
        checkCapacityFactors(actualMembers, actualCapacityFactors);
  
        boolean sameCapacityFactors = actualCapacityFactors == null ? baseCH.getCapacityFactors() == null :
              actualCapacityFactors.equals(baseCH.getCapacityFactors());
        if (actualMembers.equals(baseCH.getMembers()) && sameCapacityFactors)
           return baseCH;
  
        // The builder constructor automatically removes leavers
        Builder builder = new Builder(baseCH, actualMembers, actualCapacityFactors);
  
        // If there are segments with 0 owners, fix them
        // Try to assign the same owners for those segments as a future rebalance call would.
        Builder balancedBuilder = null;
        for (int segment = 0; segment < baseCH.getNumSegments(); segment++) {
           if (builder.getOwners(segment).isEmpty()) {
              if (balancedBuilder == null) {
                 balancedBuilder = new Builder(builder);
                 rebalanceBuilder(balancedBuilder);
              }
              builder.addOwners(segment, balancedBuilder.getOwners(segment));
           }
        }
        return builder.build();
     }