Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.java.programmer > #39125

Re: Best way to make a hashcode?

From Eric Sosman <esosman@comcast-dot-net.invalid>
Newsgroups comp.lang.java.programmer
Subject Re: Best way to make a hashcode?
Date 2019-08-27 09:39 -0400
Organization A noiseless patient Spider
Message-ID <qk3bq2$fh9$1@dont-email.me> (permalink)
References <89cadee9-0108-4c76-9e94-c8f716290582@googlegroups.com> <qk1jmg$8ck$1@dont-email.me> <11fd675f-2de2-49a1-baee-b77c2c8d8775@googlegroups.com>

Show all headers | View raw


On 8/27/2019 9:24 AM, Eric Douglas wrote:
> On Monday, August 26, 2019 at 5:41:48 PM UTC-4, Eric Sosman wrote:
>>       Just stir the String's hashes into what you've already got:
>>
>> 	public int hashCode() {
>> 	    long bits = java.lang.Double.doubleToLongBits(getX());
>> 	    bits ^= java.lang.Double.doubleToLongBits(getY()) * 31;
>> 	    bits ^= Objects.hashCode(getStringThing()) * 29;
>> 	    bits ^= Objects.hashCode(getStrungOut()) * 37;
>> 	    bits ^= Objects.hashCode(getStringBikini()) * 59;
>> 	    ...
>> 	    return ...
>> 	}
>>
>> Choice of multipliers is up to you; perhaps you'd want a few large long
>> values to stir some string bits into the high order half (might not make
>> much difference post-fold, though).
>>
>>       Note that all the String values must also be tested in equals().
>>
> 
> Another option is to do what Apache did in the POI project, they just return the .toString().hashCode() of a single object containing all the properties of the class, this object extends org.apache.xmlbeans.XmlObject.
> 

     I'm not familiar with POI, but this sounds expensive: Why create
(most likely) a StringBuilder and several Strings just to compute a
hash value?  Remember, the reason for wanting a hash value in the
first place is because you need speed; don't burn extra cycles on
making and collecting needless garbage.  (Does the toString() in
this case produce an entire XML document?  Oh, Lordy!)

     You'd also need to be concerned about the "invariance" of the
String representations of the component sub-objects.  If the Strings
change with locale or look-and-feel or something, the hash codes
could also change and mess up everything.  Even the mere passage of
time might do it: A date that renders as "today" might spontaneously
change to "yesterday" as midnight passes ...

     If you're *sure* the String representations are invariant, and if
you're *confident* that they're not too costly, well, okay, maybe.

-- 
esosman@comcast-dot-net.invalid
Five hundred twelve days to go.

Back to comp.lang.java.programmer | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread


Thread

Best way to make a hashcode? Eric Douglas <e.d.programmer@gmail.com> - 2019-08-26 13:51 -0700
  Re: Best way to make a hashcode? Eric Sosman <esosman@comcast-dot-net.invalid> - 2019-08-26 17:41 -0400
    Re: Best way to make a hashcode? Eric Douglas <e.d.programmer@gmail.com> - 2019-08-27 06:24 -0700
      Re: Best way to make a hashcode? Eric Sosman <esosman@comcast-dot-net.invalid> - 2019-08-27 09:39 -0400
        Re: Best way to make a hashcode? Eric Douglas <e.d.programmer@gmail.com> - 2019-08-27 07:29 -0700
          Re: Best way to make a hashcode? Eric Sosman <esosman@comcast-dot-net.invalid> - 2019-08-27 11:49 -0400
            Re: Best way to make a hashcode? Eric Douglas <e.d.programmer@gmail.com> - 2019-08-27 11:05 -0700
              Re: Best way to make a hashcode? Eric Sosman <esosman@comcast-dot-net.invalid> - 2019-08-27 15:16 -0400
                Re: Best way to make a hashcode? Eric Douglas <e.d.programmer@gmail.com> - 2019-08-27 13:04 -0700
                Re: Best way to make a hashcode? Daniele Futtorovic <da.futt.news@laposte-dot-net.invalid> - 2019-08-27 23:51 +0200
    Re: Best way to make a hashcode? Silvio <silvio@internet.com> - 2019-08-28 01:27 +0200
      Re: Best way to make a hashcode? Marcel Mueller <news.5.maazl@spamgourmet.org> - 2019-09-06 19:42 +0200
  Re: Best way to make a hashcode? Arne Vajhøj <arne@vajhoej.dk> - 2019-08-26 19:03 -0400
    Re: Best way to make a hashcode? Eric Douglas <e.d.programmer@gmail.com> - 2019-08-27 04:59 -0700
      Re: Best way to make a hashcode? Arne Vajhøj <arne@vajhoej.dk> - 2019-08-27 21:08 -0400
        Re: Best way to make a hashcode? ross.finlayson@gmail.com - 2019-09-05 20:27 -0700
  Re: Best way to make a hashcode? trisha guillot <guillottrisha347@gmail.com> - 2020-01-18 07:25 -0800

csiph-web