Hash Code for a group of three fields

后端 未结 2 1128
别那么骄傲
别那么骄傲 2021-01-28 11:00

I have three fields, namely

  1. Number1
  2. Number2
  3. Time

I am trying to write a function in java that returns a unique hash value (

相关标签:
2条回答
  • 2021-01-28 11:19

    I take it's a special version of hashCode. Otherwise you would need to overwrite hashCode, don't define a new method. Containers like HashSet don't get your own hash code.

    • So for your specialized version for long, you do not need to use the xor (^) because it's already long. Just use the long value.
    • When using hashCode of String it's not for long, just for int, so it will not "use" all your space. You could duplicate the hashCode of String with longs for your purpose.
    • else looks good.

    (By the way, members should be called with lower letters and Time should be private as well.)

    0 讨论(0)
  • 2021-01-28 11:24

    You can just use HashCodeBuilder from commons-lang and not have to worry about doing this by hand anymore.

    @Override
    public int hashCode() {
     // you pick a hard-coded, randomly chosen, non-zero, odd number
     // ideally different for each class
     return new HashCodeBuilder(17, 37).
       append(Number1).
       append(Number2).
       append(Time).
       toHashCode();
    }
    

    btw, it's convention in Java for variable names to start with a lowercase. You're going to find it confusing to name variables things like Number1, Number2, etc., as people will confuse these with the names of types (such as String, Number, Long, etc.).

    0 讨论(0)
提交回复
热议问题