我正在构造一个> 200,000,000个对象的集合,该对象需要按其中一个对象属性排序。此时,该集合将转换为列表,然后对其进行排序。自然,此操作需要一段时间,并且我希望优化代码的这一部分。我知道,如果以未知顺序添加对象,则这可能是最有效的方法(例如,参见Is it faster to sort a list after inserting items or adding them to a sorted list)。
但是,这些对象是按平均1000-5000个对象的集合添加的,我知道这些对象是经过排序的。有没有一种方法可以在构建集时使用此信息,并最大程度地减少此问题的排序时间?我提供了一个使用TreeSet的示例,但据我发现(例如How expensive is it to resort a sorted collection by adding it to a SortedSet),将隐式排序的集合添加到TreeSet不会减少排序时间。
SortedSet<Transition> sortedTransitionSet =
new TreeSet<>(Comparator.comparing(k -> k.getTimeSeconds()));
for (Segment segment: segments) {
Set<Transition> segmentTransitions = segment.getTransitions();
sortedTransitionSet.addAll(segmentTransitions);
}
班级细分和过渡是我自己的。 Transition对象包含一个包含以秒为单位的时间戳记的字段,通过该字段需要对生成的TreeSet进行排序。