Path: csiph.com!x330-a1.tempe.blueboxinc.net!usenet.pasdenom.info!weretis.net!feeder4.news.weretis.net!eternal-september.org!feeder.eternal-september.org!.POSTED!not-for-mail From: markspace <-@.> Newsgroups: comp.lang.java.programmer Subject: Re: equals(), Sets, Maps, and degrees of equality Date: Thu, 10 Nov 2011 19:07:24 -0800 Organization: A noiseless patient Spider Lines: 29 Message-ID: References: <24123649.762.1320892382934.JavaMail.geo-discussion-forums@vbmh5> <663d43b1-2c58-40ea-90d5-d46b8ae821e5@cc2g2000vbb.googlegroups.com> <5a705514-4b5e-48c2-8984-83e3b62b23b9@y7g2000vbe.googlegroups.com> Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Injection-Date: Fri, 11 Nov 2011 03:07:27 +0000 (UTC) Injection-Info: mx04.eternal-september.org; posting-host="XjIWM99mD7Ijfdu600oVPA"; logging-data="14953"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1+M2KCYprmjMh0fcNKR1MSqEz5q7qvrO8c=" User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:8.0) Gecko/20111105 Thunderbird/8.0 In-Reply-To: Cancel-Lock: sha1:pC/wY58wI/j6ziDRdbnDDXRvVPQ= Xref: x330-a1.tempe.blueboxinc.net comp.lang.java.programmer:9841 On 11/10/2011 5:58 PM, Eric Sosman wrote: > markspace's idea of endowing each Dog > with a DogComparisonStrategy wouldn't work if the same Dog instance > could be a member of the Set *and* a key in the Map: Right. It's really not that different than making subclasses to handle different schemes. It just tries to be a bit more pithy about how it does it. I'm mostly just tossing it out there to spur a little thought and discussion. The "concurrency" comment caught me off guard, I'll admit. I actually like the suggestion to use a Tree with a supplied Comparator. It seems closest to what the OP really needs. Second choice is just use the wrappers. Third choice: if profiling shows wrappers or the Tree slowing things down, implement custom Map/Set classes to do exactly what's needed. > You'd need to > visit every Dog and reset its DogComparisonStrategy before doing Stuff like that probably isn't kosher. What if some external process affects the the Map or Set right in the middle of iterating over its contents? This could be really ugly and a real maintenance hazard.