This is one of Stuart's designs
Trying to blame it all on me, aren't you? :-)
Overall the changes look good.
I can't really speak to how to improve the loops in certain circumstances (the
"tricky circular array traversal code from ArrayDeque" as Martin puts it). But I
observe that moving the randomization to iteration has started to increase the
complexity of the code. I understand why we did this, but it's starting to look
like we might want to refactor the various loops into a single internal
"iterator" to avoid duplicating it all over the place. Perhaps for a future
enhancement.
I observe that the serialized forms aren't randomized. When the storage order
was randomized, the serial form was also randomized. But now that randomization
is done during iteration, the serialized forms are fixed. Hmmm. Not sure what I
think about that.
s'marks