给定一个长的毫秒级延迟数组,我想从中计算百分位数。我有下面的方法可以完成这项工作,但我不确定如何验证它是否给我准确的结果?
public static long[] percentiles(long[] latencies, double... percentiles) {
Arrays.sort(latencies, 0, latencies.length);
long[] values = new long[percentiles.length];
for (int i = 0; i < percentiles.length; i++) {
int index = (int) (percentiles[i] * latencies.length);
values[i] = latencies[index];
}
return values;
}
我想从latencies
数组中获取第50、95、99和99.9百分位数。
long[] percs = percentiles(latencies, 0.5, 0.95, 0.99, 0.999);
如何在给定一个长的延迟数组的情况下获得百分位数?我正在使用Java 7。
percentiles
方法不仅计算百分位数值(并非总是正确--请参见我的答案),并返回这些值,它还会使latencies
数组排序,这是一个可能不希望出现的副作用。在你尝试编写的小程序中,这可能是无害的,但通常情况下,一个方法具有非其目的的副作用是不好的实践。 - ajb