public void setParameters(int[] x, VectorI probability) {
    if (x.length != probability.size())
      throw new InvalidArgumentError("The arguments must be the same size.");
    if (x.length == 0) throw new InvalidArgumentError("The arguments are empty.");

    setValid(false);
    _elements = new Vector<Element>(x.length);
    _index = new HashMap<Element, Element>(x.length);
    double scale = 1.0 / probability.sum(0);
    for (Iterator<VectorElementI> e = probability.elements(); e.hasNext(); ) {
      VectorElementI ve = e.next();
      checkProbability(ve.getValue());
      Element el = new Element(x[ve.getIndex()], ve.getValue() * scale);
      _elements.addElement(el);
      _index.put(el, el);
    }
    new QuickSort<Element>(_tmp).sort(_elements);
    setVariableBounds(0, x.length);
    setCdfBounds(0.0, 1.0);
    setValid(true);
  }