> > > http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/collect/Sets.html#newConcurrentHashSet(java.lang.Iterable) > . > It's syntactic sugar, but it makes for cleaner code so I'll probably use it > next time I need one of these.
Ah. nice. Next time I look at the code I’ll try to fix it to use this. On Fri, May 8, 2015 at 8:04 PM, Tim Bain <tb...@alumni.duke.edu> wrote: > On May 8, 2015 11:33 AM, "Kevin Burton" <bur...@spinn3r.com> wrote: > > > > On Thu, May 7, 2015 at 6:05 AM, Tim Bain <tb...@alumni.duke.edu> wrote: > > > > > The other reason a List sometimes gets used is when you want to be able > to > > > arbitrarily order the elements. If you're using the natural ordering > or > > > can write a comparator, you can use a SortedSet, but if you need them > to be > > > reorderable, I don't know of a Collection that allows arbitrary > ordering > > > but enforces the Set semantic of not allowing duplicates. > > > > > > Yes. And strictly speaking, in set theory, the order is irrelevant. > Sets > > are equivalent if they share the same members. But I’m not sure Java > sets > > are supposed to be identical set theoretic sets. > > Set uses those semantics, while SortedSet adds guarantees about ordering. > (Set theory doesn't disallow ordering or guarantee non-ordering, it only > avoids making any guarantees at all about ordering, so this is an addition, > not a change, and SortedSets still conform to the semantics of theoretical > sets in addition to conforming to the ordering guarantee.) > > > > I don't think that there's a need to arbitrarily reorder any of those > three > > > Collections you're changing, but you need to make sure none of them had > > > code that relied on inserting elements in sorted order and then having > them > > > maintaining that order. I could easily see your changes resulting in > > > jumbled displays in the JMX beans (though maybe there's code that sorts > > > them at display time so maybe it's not a problem), so make sure you > test > > > that thoroughly. > > > > > > > Ah. I’ll take a look at that but didn’t see this yet. > > > > I’m also expecting the tests to find any irregularities.. hopefully. > > I don't know whether to expect tests that check insertion/alphabetical > ordering of JMX beans given that the code has probably been giving us that > for free since it was written, nor whether that's the responsibility of the > code that exposes the beans or the responsibility of the JMX viewer such as > JConsole. But I'd be cautious about assuming that all tests passing == > everything's cool, because I could easily see not validating that > explicitly in a test. But it would be a good test to have (if that's > actually our responsibility and not handled by the viewer). > > > > Also, why are you doing Collections.newSetFromMap( new > > > ConcurrentHashMap<T,Boolean>()) instead of just new Concurrent > > > HashSet<T>()? That seems super convoluted and ultimately not > threadsafe > > > despite appearing to be; am I missing something? > > > > > > > > > I don’t think there is a ConcurrentHashSet… There’s a ConcurrentHashMap > but > > no ConcurrentHashSet.. The work around is to use newSetFromMap … > > > > I got bit by that too. I just always assumed there was a > ConcurrentHashSet > > but the above newSetFromMap works. It’s a lightweight Set implementation. > > In the JDK it’s literally just a 10 line decorator. > > I'd always assumed there was one, though reading up on it I can see why it > would be better to be able to make sets from any arbitrary map type that > gets invented rather than having to keep adding set types. Thanks for > teaching me something new today. I also discovered that Guava's got a > static method to do those two lines you wrote if you wanted a convenience > method: > > http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/collect/Sets.html#newConcurrentHashSet(java.lang.Iterable) > . > It's syntactic sugar, but it makes for cleaner code so I'll probably use it > next time I need one of these. > > Tim > -- Founder/CEO Spinn3r.com Location: *San Francisco, CA* blog: http://burtonator.wordpress.com … or check out my Google+ profile <https://plus.google.com/102718274791889610666/posts>