首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对于两个java对象,检查Deep的最快和有效的方法是什么?

对于两个java对象,检查Deep的最快和有效的方法是什么?
EN

Stack Overflow用户
提问于 2015-04-17 09:42:48
回答 3查看 2K关注 0票数 6

我有两个byte[]字段大小为数百万的java对象。检查这些java对象的深度相等的最快和有效方法是什么?

抽样实体:

代码语言:javascript
复制
@Entity
public class NormalBook
{

  @Id
  private String bookId;

  @Column
  private String title;

  @Column
  private byte[] pdfFile;

  //setters and getters

  }

注意:我这样做是为了一个ORM工具,基本上我是在检查一个对象(处于托管状态),其中有一个对象存在于持久性上下文中。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-04-17 09:45:42

重写equals()或有一个*助手方法(坏选项!)分5步完成:

代码语言:javascript
复制
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 
票数 2
EN

Stack Overflow用户

发布于 2015-04-17 09:48:31

在对象类的equals()定义中使用以下内容:

代码语言:javascript
复制
java.util.Arrays.equals(bs1, bs2)

您还可能希望首先检查它们是否是相同的数组(实例)。尽管这种方法很有可能做到这一点。

例如(并对包含数组的类进行一些假设):

代码语言:javascript
复制
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()也应该考虑这些字段。

(如果您能够提供更多关于数组中存储的数据类型的信息,可能会有更好的答案。)

票数 0
EN

Stack Overflow用户

发布于 2015-04-17 09:57:23

如果类中有类似于byte[]的字段,则可以使用以下内容:

代码语言:javascript
复制
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),那么您可以比较一下哈斯代码。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29695719

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档