Java集合。创建排序视图而不创建副本

时间:2015-02-11 08:29:44

标签: java memory collections comparator

是否有可能在不创建副本的情况下迭代对动态内容进行排序的集合?

更新:要排序的集合是一个只读列表。

2 个答案:

答案 0 :(得分:5)

您可以使用Streams API

yourCollection.stream()
              .sorted(yourComparator)
              .forEach(...);

这不会修改yourCollection,并允许您按排序顺序迭代集合。但是,sorted方法可能会在幕后创建副本,因此您很可能会获得与创建副本相同的内存/ CPU开销,对副本进行排序并迭代排序的副本自己。

(对于Java 7及更早版本,我不认为API中存在非侵入性"排序方法。您必须明确复制,如果你不想修改原来的收藏品。)

答案 1 :(得分:1)

假设您正在尝试迭代集合的排序版本。

第一个元素是什么?最小元素。

但你来读取整个集合以确定最小元素,或者不能保证你没有错过一些稍后会比之前的所有内容都要小的元素。

这或多或少意味着你必须复制:你必须先阅读整个集合才能开始返回元素,之后再开始阅读它是多余的。