-1

我正在寻找一个库,它给定一棵对象树,对整个结构执行消息摘要或散列。

我想看看传递给方法的对象是否被修改(这个对象包含其他对象,包含对象等等 - 没有一个是不可变的)。

有没有办法在调用过程中检查结构中任何对象的状态是否发生变化?

4

3 回答 3

1

您可以为树中的所有对象实现 hashCode()。如果根对象的 hashCode 发生了变化,你就知道树中某个对象的状态发生了变化。

于 2009-08-31T12:31:16.613 回答
0

使用散列来检测更改的问题在于它不能提供绝对的“否”答案。它只是告诉你某些东西可能没有改变。

如果您可以忽略一些更改,那么可以确定,对树进行哈希处理。

如果没有,您将不得不考虑其他选择,但在我提出建议之前,我需要更多地了解您的情况。

于 2009-08-31T12:49:25.440 回答
0

我已经使用 JRE 提供的标准 MessageDigest 和 MD5 完成了这项工作。

一个链接

关于碰撞,当我有 2 个具有相同 MD5 的对象时,我知道它们可能相同,因此我进行了完整的递归比较。尽管如此,碰撞还是不太可能发生,并且确实值得实施这种技术。

于 2009-08-31T12:49:36.360 回答