sumBuffer = ListUtils.sumQ(buffer); sqrSumBuffer = ListUtils.sum2Q(buffer); float temp = (float) Math.max( Math.sqrt(2 * (n * sqrSumBuffer - sumBuffer * sumBuffer) / (n * (n - 1)))); ListUtils.repQ(sdBuffer, temp, n); preKernelSum.addLast(ListUtils.kernelSum(x, buffer, sdBuffer)); ListUtils.addQ(postKernelSum, ListUtils.kernelQ(buffer, tempQ1, tempQ2)); buffer.addLast(residual); preKernelSum.addLast(ListUtils.kernelSubSum(residual, buffer, sdBuffer, 0, preWindowSize - 1)); postKernelSum.addLast(ListUtils.kernelSubSum(residual, buffer, sdBuffer, preWindowSize, buffer.size() - 1)); } else { ListUtils.kernelQ(buffer, buffer.subList(0, 1), sdBuffer.subList(0, 1)); ListUtils.subtractQ(preKernelSum, preRemovedValues); LinkedList<Float> midExchangedValues = ListUtils.kernelQ(buffer, buffer.subList(preWindowSize, preWindowSize + 1), sdBuffer.subList(preWindowSize, preWindowSize + 1)); ListUtils.addQ(preKernelSum, midExchangedValues); LinkedList<Float> tempQ2 = new LinkedList<Float>(); tempQ2.add(temp); ListUtils.subtractQ(postKernelSum, midExchangedValues); LinkedList<Float> postAddedValues = ListUtils.kernelQ(buffer, tempQ1, tempQ2); ListUtils.addQ(postKernelSum, postAddedValues);