为什么我的矢量大小为0?

时间:2014-01-17 22:20:14

标签: java

正如您在屏幕截图中看到的那样,new_mean的容量为0,尽管我已经创建了它,初始容量为2,因此我获得了索引超出范围的异常

有谁知道我做错了什么?

enter image description here

更新:这是代码

private static Vector<Double> get_new_mean(
        Tuple<Set<Vector<Double>>, Vector<Double>> cluster,
        Vector<Double> v, boolean is_being_added) {
    Vector<Double> previous_mean = cluster.y;
    int n = previous_mean.size(), set_size = cluster.x.size();
    Vector<Double> new_mean = new Vector<Double>(n);
    if (is_being_added) {
        for (int i = 0; i < n; ++i) {
            double temp = set_size * previous_mean.get(i);
            double updated_mean = (temp + v.get(i)) / (set_size + 1);
            new_mean.set(i, updated_mean);
        }
    } else {
        if (set_size > 1) {
            for (int i = 0; i < n; ++i) {
                double temp = set_size * previous_mean.get(i);
                double updated_mean = (temp - v.get(i)) / (set_size - 1);
                new_mean.set(i, updated_mean);
            }
        } else {
            new_mean = null;
        }
    }
    return new_mean;
}

3 个答案:

答案 0 :(得分:5)

容量是可以存储的元素总数。 大小是您实际存储的元素数量。

在您的代码中,Vector中没有存储任何内容,因此当您尝试访问元素0时会出现IndexOutOfBoundsException。

答案 1 :(得分:0)

使用set(int, object)更改现有元素。使用add(int, object)添加元素。

这在Vector的javadoc中有解释。 elementCount应为0(它为空),capacityIncrement默认为0,仅在您超出指定限制(2)时才相关。

答案 2 :(得分:0)

您需要在Vector填充null值,使其大小等于容量。容量是集合的优化提示,它不会对集合使用情况进行任何更改。当您向其添加元素时,集合将自动增长,容量将增加。因此,使用更高容量进行初始化将需要更少的扩展和更少的内存分配。