public function drop($index)
    {
        if (false === array_key_exists($index, $this->elements)) {
            throw new \OutOfBoundsException();
        }
        unset($this->elements[$index]);
        $this->elements = array_values($this->elements);
        foreach ($this->subLists as $subList) {
            $subList->drop($index, true);
        }
        return $this;
    }