6

数百万のオーダーのサイズのbyte[]フィールドを持つ2つのJavaオブジェクトがあります。これらの Java オブジェクトのDeep Equalをチェックする最も速くて効率的な方法は何ですか?

サンプル エンティティ:

@Entity
public class NormalBook
{

  @Id
  private String bookId;

  @Column
  private String title;

  @Column
  private byte[] pdfFile;

  //setters and getters

  }

注:私はORMツールのためにそれを行っています。基本的には、永続コンテキストに存在するオブジェクトでオブジェクト(管理された状態)をチェックしています。

4

3 に答える 3

2

オーバーライド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-17T09:45:42.140 に答える
0

クラスに次のようなフィールドがある場合、次の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であることを保証できる場合(これは重要でhascodeある必要がありますunique)、hascode を比較するだけです。

于 2015-04-17T09:57:23.893 に答える