at an initial capacity of 2/3 max, and a load factor of 0.75, this should mean at most one resize of the set.  We could size it accurately and set the load to 1, but my understanding is that performance is worse, and if we ignore some nodes we'l have slack anyway.  Still, maybe not worth doing anything but setting the size to Math.min(16, (int)events.size())