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.