import java.util.*; import java.io.*; public class CompareTest { public static void main(String[] args) throws IOException { List ints = new ArrayList(); List files = new ArrayList(); for (int i = 0; i < 245; ++i) { ints.add(i); } Collections.shuffle(ints); for (Integer i : ints) { File file = new File("file-" + i); file.createNewFile(); files.add(file); } compare(ints, new IntsComparator()); compare(files, new FilesComparator()); } private static void compare(List list, CountingComparator comparator) { int startCount = comparator.getCount(); long start = System.nanoTime(); Collections.sort(list, comparator); long end = System.nanoTime(); long nanos = end - start; double seconds = nanos / 1000000000.0D; int endCount = comparator.getCount(); System.out.printf("%s took %f seconds with %d comparisons%n", comparator.getClass().getSimpleName(), seconds, endCount - startCount); } private interface CountingComparator extends Comparator { int getCount(); } private static class IntsComparator implements CountingComparator { @Override public int compare(Integer o1, Integer o2) { ++count; return o1 - o2; } @Override public int getCount() { return count; } int count = 0; } private static class FilesComparator implements CountingComparator { @Override public int compare(File o1, File o2) { ++count; return (int)(o1.lastModified() - o2.lastModified()); } @Override public int getCount() { return count; } int count = 0; }; }