在Java中更改原始数组的类型

时间:2016-02-08 13:05:15

标签: java generics types casting primitive-types

我在Java中有一个数字程序,可以对原始数组执行大量操作。我使用原始数组(double[] / float[] / int[]),因为它们比处理值指针数组(例如ArrayList<Float>)更具内存和时间效率。

现在,我希望能够改变我的原始类型,例如。从double到float,基于我程序的一些参数。但由于原始不能用作仿制药,我不能为我的生活弄清楚如何。

有没有办法,或者是否需要进行大量的代码复制或转换只是一个不可避免的Java缺陷?

2 个答案:

答案 0 :(得分:0)

你真的只需要处理原始类型吗?如果没有,你可以考虑使用Number数组 - 这样你就可以实例化Float []或Double []。

Number numbers[] = (param == "float" ? new Float[n] : new Double[n]);

我认为使用包装器的效率低于使用原语(虽然我没有基准测试),但它确实比使用Collections(例如ArrayList)更快。

答案 1 :(得分:0)

这是包装类的可能实现:

public class NumberListWrapper<T extends Number> {
    private ArrayList<T> numbers = new ArrayList<>();

    public boolean add(T num) {
        return numbers.add(num);
    }

    public boolean contains(T num) {
        return numbers.contains(num);
    }

    public boolean remove(T num) {
        return numbers.remove(num);
    }

    public float[] toFloatArray() {
        float[] floats = new float[numbers.size()];

        for(int i = 0; i < numbers.size(); i++) {
            floats[i] = numbers.get(i).floatValue();
        }

        return floats;
    }
}

其他原始数组转换使用与此浮点数相同的模式。

编辑:你可能也想要一个get()方法......大声笑