我正在寻找一个好方法,建立一个有限的链表。如果链表是“满的”,第一个元素将被删除,新的元素将被添加。所以我总是有“最新的”“限制大小”元素。
这是通过以下方式实现的:
private int maxSize;
public LimitedLinkedList(int maxSize) {
this.maxSize = maxSize;
}
@Override
public synchronized boolean add(E object) {
boolean success = super.add(object);
while (this.size() >= maxSize) {
removeFirst();
}
return success;
}
现在我有以下问题:我需要计算链表的平均值。这是我随机得到并发修改异常或索引越界异常的时刻。我的平均方法:
public synchronized static double movingAverage(
LinkedList<AverageObject> valueList) {
if (valueList.isEmpty()) {
return 0;
}
double sum = 0;
int m = 0;
for (int i = 0; i < valueList.size(); i++) {
AverageObject object= valueList.get(i);
sum += object.value;
m++;
}
sum = (m != 0) ? sum / m : sum;
return sum;
}
你知道避免并发修改异常的好方法吗?
我唯一的想法是,每次更改列表时计算平均值,所以当我想要平均值时,我不必遍历它。