我有两个byte[]字段大小为数百万的java对象。检查这些java对象的深度相等的最快和有效方法是什么?
抽样实体:
@Entity
public class NormalBook
{
@Id
private String bookId;
@Column
private String title;
@Column
private byte[] pdfFile;
//setters and getters
}注意:我这样做是为了一个ORM工具,基本上我是在检查一个对象(处于托管状态),其中有一个对象存在于持久性上下文中。
发布于 2015-04-17 09:45:42
重写equals()或有一个*助手方法(坏选项!)分5步完成:
1. Check for *not null*.
2. Check for same *type*.
3. Check for *size of byte[]*.
4. Check for `==` (*reference equality* of byte[])
5. Start comparing byte values 发布于 2015-04-17 09:48:31
在对象类的equals()定义中使用以下内容:
java.util.Arrays.equals(bs1, bs2)您还可能希望首先检查它们是否是相同的数组(实例)。尽管这种方法很有可能做到这一点。
例如(并对包含数组的类进行一些假设):
public boolean equals(Object obj) {
if(this == obj)
return true;
if(!(obj instanceof MyObject)) // covers case where obj null, too.
return false;
return Arrays.equals(this.bytes, ((MyObject)obj).bytes);
}如果您的类中还有其他字段,您的equals()也应该考虑这些字段。
(如果您能够提供更多关于数组中存储的数据类型的信息,可能会有更好的答案。)
发布于 2015-04-17 09:57:23
如果类中有类似于byte[]的字段,则可以使用以下内容:
public class MyClass {
byte[] a;
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
MyClass other = (MyClass) obj;
if (!Arrays.equals(a, other.a))
return false;
return true;
}
}如果您关心性能,并且能够确保一个唯一的很重要,那么hascode需要是unique),那么您可以比较一下哈斯代码。
https://stackoverflow.com/questions/29695719
复制相似问题