【发布时间】:2016-08-05 09:54:00
【问题描述】:
假设set 是带有n 元素的HashSet,而k 是介于0(包括)和n(不包括)之间的一些int。
有人可以简单地解释一下,当你这样做时实际发生了什么?
set.stream().skip(k).findFirst();
具体来说,它的时间复杂度是多少?将spliterator() 添加到Collection 接口是否意味着我们现在可以比Java 7 更快地访问集合的“随机”元素?
【问题讨论】:
-
一般来说不,不,也不是
HashSet。HashSet.spliterator()没有ORDERED属性,因此您可能会在此处得到未定义的行为。 -
@LouisWasserman 谢谢,我没想到,只是想确认一下。
-
您可能会注意到
Spliterator接口本身没有skip方法或任何其他将指针移动到当前元素的方法。因此,没有办法在此之上实现“更快地访问集合的‘随机’元素”。 -
@Holger 是的,这是一个非常愚蠢的问题。我需要好好研究一下,因为我仍然不完全确定分裂器是什么。
-
我不认为这是一个愚蠢的问题。通过查看 Stream API 本身,通常不清楚内部优化的实际潜力在哪里,在哪里没有。某些部分故意未指定,并且在当前实现中令人惊讶地忽略了一些明显的潜力。对很多开发者来说,它似乎有一种神秘的气氛……
标签: java collections java-8 java-stream