我在Java中编写一个性能关键的方法,它使用一堆double
值来存储点的(x,y)坐标。目前,我正在使用Stack<Double>
,但我意识到由于自动装箱的成本,这可能会导致一些性能问题。坐标通常在调用之间发生变化,这就是缓存Double
包装器无效的原因。
因此,我正在寻找一个假设的类,我们称之为DoubleStack
,其行为和界面类似于Stack<T>
,但仅对基元进行操作。是否有一个经常使用的类具有这样的行为,或者更好的是,一个由原色组成的库 - 存储流行容器的替代品,包括列表,堆栈和队列?
答案 0 :(得分:0)
我同意关于过早优化的评论,但仅仅是为了它的乐趣,这里是一个简单的DoubleStack实现:
public class HeresYourDoubleStack {
private int size = 0;
private double[] values= new double[16];
public int size() {
return size;
}
public double pop() {
if(size==0)throw new NoSuchElementException();
return values[size--];
}
public void push(double value) {
resizeIfNecessary();
values[size++]=value;
}
private void resizeIfNecessary() {
if(values.length==size){
double[] tmp = new double[size * 2];
System.arraycopy(values,0,tmp,0,size);
values=tmp;
}
}
}
未经过测试,绝对不是线程安全的。
答案 1 :(得分:0)