Might as well go whole hog here so for grins I wrote a trivial JMH [1] 
micro-benchmark which gave these results:

Forks: 2
Warmup: 5 iterations, 2 s each
Measurement: 10 iterations, 3 s each

Version            Mode  Cnt  Score   Error      Units
JDK 9              avgt   20    0.407 +/- 0.004  us/op
ArrayList          avgt   20  505.389 +/- 2.965  us/op
IntStream          avgt   20  522.015 +/- 3.040  us/op
BitSet             avgt   20  507.290 +/- 1.812  us/op

These were obtained in a Windows 7 VirtualBox VM running on a macOS laptop and 
should be taken with a grain of salt in general, but they suggest that the 
ArrayList and BitSet versions are statistically equivalent and the IntStream 
version only slightly slower. However given that they are all three orders of 
magnitude slower than the version which does not check existence it hardly 
matters. Also it does not say a thing about the memory footprint or number of 
objects created, etc.

Brian

[1] http://openjdk.java.net/projects/code-tools/jmh/

On Jun 29, 2017, at 8:11 AM, Tagir Valeev <amae...@gmail.com> wrote:

> Note that BitSet version removes single capturing lambda and additional 
> stream step (every step creates at least two objects), so the tradeoff is not 
> so obvious. Also it's probably possible that single-element array could be 
> scalarized by JIT.
> 
> With best regards,
> Tagir Valeev.
> 
> On Thu, Jun 29, 2017 at 5:25 PM, Brian 
> Burkhalter<brian.burkhal...@oracle.com> wrote:
> 
> On Jun 29, 2017, at 7:21 AM, Roger Riggs <roger.ri...@oracle.com> wrote:
> 
> > Just interesting how much attention this snippet of code received.  :)
> 
> Agreed.

Reply via email to