使用hashcode

问题描述 投票:0回答:1

class SomeRequest{ Set<Long> longs; Optional<String> name; Optional<Set<Long>> opLongs; Optional<Long> toBeIgnored; Collection<Field> fields }

我正在寻找比较上述类的两个对象的方法(我以前保存了一个对象的标签),但我想忽略某些字段。请注意,由于这只是一种用例,所以我不想覆盖
hashCode

private int getParameterHash(SomeRequest req){ SomeRequest newReq = new SomeRequest( req.longs, req.name, req.opLongs, null, //because I want to ignore this for my use case req.fields ); return newReq.hashCode(); }

i我将此哈希保存在db中,然后当我遇到第二个对象时,我计算了相同的哈希,并将其与我已经必须确保它们相等的东西进行比较。

问题:

有更好的方法吗?

Set
    不在乎订单,但
  1. Collection
  2. HashMap
    会。那么我该如何忽略订单呢?
        
java hashcode
1个回答
0
投票

填写“ this”的意思是“计算自定义哈希代码”,如果有更好的方法是有争议的。

但是有一种替代方法。 如果不将自定义标签用于
HashSet

Set

或等效的键,则可以简单地将其定义为新方法。

Collection
不在乎订单,但

Collection

fields.hashCode()


取决于实际

fields

类是什么。  集合的哈希码可能对订单敏感也可能不敏感。

那么我该如何忽略订单?

确定您的情况是敏感的,您可以用一些代码替换呼叫,以迭代the的元素并计算其hashcodes的XOR。


最新问题
© www.soinside.com 2019 - 2025. All rights reserved.