给定较长的延迟(以毫秒为单位),我想根据它们计算百分位。我得到了下面的工作方法,但是我不确定如何验证这是否给我准确的结果?

  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。

最佳答案

这是您要寻找的:

public static void main(String[] args) {
    List<Long> latencies = new List<Long>() { 3, 6, 7, 8, 8, 9, 10, 13, 15, 16, 20 };

    System.out.println(percentile(latencies,25));
    System.out.println(percentile(latencies, 50));
    System.out.println(percentile(latencies, 75));
    System.out.println(percentile(latencies, 100));
}

public static long percentile(List<Long> latencies, double percentile) {
    Collections.sort(latencies);
    int index = (int) Math.ceil(percentile / 100.0 * latencies.size());
    return latencies.get(index-1);
}

java - 从长数组计算百分位数?-LMLPHP

10-07 15:37