我在Java中有一个数字程序,可以对原始数组执行大量操作。我使用原始数组(double[]
/ float[]
/ int[]
),因为它们比处理值指针数组(例如ArrayList<Float>
)更具内存和时间效率。
现在,我希望能够改变我的原始类型,例如。从double到float,基于我程序的一些参数。但由于原始不能用作仿制药,我不能为我的生活弄清楚如何。
有没有办法,或者是否需要进行大量的代码复制或转换只是一个不可避免的Java缺陷?
答案 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()方法......大声笑