If there are a lot of comparisons to be made and performance is an issue, the private List<Comparator<T>> could be stored as an array Comparator[] (it is set once at the constructor, never altered, and never read by clients) -- at the very least make it final.