可变基元作为通用参数

十一十一

在我的应用程序中,我将拥有约100k个单元的数组。该阵列将以高频率进行更新,因此性能至关重要。单元格是某种类型的值的容器,大多数是整数或浮点型,但是在某些情况下使用2个或更多int,因此最好的选择是使此类通用。我想防止复制并在每次更新时创建很多新对象。我认为对象应该是可变的,但是

 Cell<T implements Mutable<T>>

在哪里

Mutable<T> 

有方法

void set(T value)

不能让我到任何地方,set(T)将复制参数。您有任何想法使之成为可能吗?防止复制值得吗?

shmosel

尚不清楚您的代码是什么样子,但是如果您要为性能创建一个可变的原始包装器,则它不应是通用的,因为这将导致其值自动装箱。您会想要这样的东西:

class Cell<T> {
    private T value;

    public T getValue() {
        return value;
    }

    public void setValue(T value) {
        this.value = value;
    }
}

class IntWrapper {
    private int value;

    private int get() {
        return value;
    }

    private void set(int value) {
        this.value = value;
    }
}

现在我们可以更新单元格的值,而无需任何对象构造或自动装箱:

class Main {
    private Cell<IntWrapper>[] cells;
    //...
    void updateCell(int index, int newValue) {
        cells[index].getValue().set(newValue);
    }
}

请注意,通常最好避免混合使用泛型和数组,因此最好使用List<Cell<IntWrapper>>(性能差异可以忽略不计)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章