可以确定Java Comparator的进度吗?

Dan*_*ner 7 java sorting progress comparator

我正在使用Comparator实现来对大量对象进行排序.根据此集合中对象的类型,排序需要几毫秒到半分钟.有没有办法确定Comparatorwhile排序的进度?我想为用户想象一下这个.

Collections.sort(sorted, new Comparator<Object[]>() {
    public int compare(Object[] o1, Object[] o2) {
        /* do it... */
        return order;
    }
}
Run Code Online (Sandbox Code Playgroud)

该集合可以包含简单的短String对象,Date对象或(最坏情况下)CLOB对象,这些对象需要在排序时获取数据.

Ale*_*ien 2

您可以通过编写一个对“全局”变量进行计数的比较器来做到这一点。

但为了可视化分析目的的进度,您必须复制列表,然后对其进行两次排序。第一次确定比较器调用的次数。下次您可以通过将当前计数器与第一次排序的值进行比较来知道自己已经走了多远。

当另一个线程正在排序时,您将需要第二个线程来读取计数器。

另一种可能性是估计比较器调用的数量:平均而言,这可能与 n * ld (n) 有关。

然后再次计数,并从另一个线程读取。这样你只需排序一次。