Path: csiph.com!x330-a1.tempe.blueboxinc.net!usenet.pasdenom.info!news.albasani.net!eternal-september.org!feeder.eternal-september.org!.POSTED!not-for-mail From: Eric Sosman Newsgroups: comp.lang.java.programmer Subject: Re: equals(), Sets, Maps, and degrees of equality Date: Thu, 10 Nov 2011 23:24:48 -0500 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 04:26:14 +0000 (UTC) Injection-Info: mx04.eternal-september.org; posting-host="HSlJAUb3pGXi3i7ZL/HoAw"; logging-data="5444"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1/jGDKbfPzd0WuJyYh41onZ" User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:8.0) Gecko/20111105 Thunderbird/8.0 In-Reply-To: Cancel-Lock: sha1:sy8NHgDb6ln6cDdFuHhL2GrjzbE= Xref: x330-a1.tempe.blueboxinc.net comp.lang.java.programmer:9842 On 11/10/2011 10:07 PM, markspace wrote: > 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 seems strikingly different to me. Your suggestion is that a Dog could dictate which of several hashCode/equals pairs to use, but any particular Dog instance could select only one pair at a time. With inner classes or wrappers, a single Dog instance could present multiple aspects simultaneously and could participate simultaneously in multiple collections based on those different key-nesses. Look at it this way: In your formulation, the Dog instance says "I am known by my breed" or "I am known by my name," and every Set or Map has to accept the Dog's own decision. With inner classes or wrappers, the Dog says "I am a Beagle and my name is Snoopy," and each Set or Map makes its own choice about which aspect counts. In one case the Dog dictates its aspect; in the other the collection chooses the aspect it cares about. -- Eric Sosman esosman@ieee-dot-org.invalid