0

次の変数があります。

byte[][] bytes;
byte[] value;

valueinの最初に一致するエントリのインデックスを見つけるスマートな方法はありbytesますか?

valueは のエントリと同じオブジェクトでbytesはなく、同じ内容を持っているだけです。

もちろん、次のようにすることもできます。

int idx = -1;
for(int i=0;i<bytes.length;i++) {
   if(Arrays.equals(value, bytes[i])) {
      idx = i;
      break;
   }
}
// idx is index or -1 if not found

もっと簡単にできるのだろうかと思っていました。

4

2 に答える 2

1

条件チェックが不要になるようにコードを変更します。

FOUND: {
    for(int i = 0; i < bytes.length; i++) {
       if(Arrays.equals(value, bytes[i])) {
          // handle found match
          break FOUND;
       }
    }
    // can only be here if it didn't find a match
}
于 2013-06-15T23:10:28.643 に答える
1

あなたはバイトの配列について話しているだけなので...いいえ。

サンプルコードにあるのは、それを行う方法です。それらをバイトごとに比較する必要があります。そして、おそらくそれは完全に受け入れられます。

「簡単にする」唯一の方法は、一意のハッシュ アルゴリズムを使用してバイト配列を比較する方法を提供するオブジェクトにバイト配列をカプセル化することです (参照:equals()およびhashcode())。それでも、ハッシュを計算するオーバーヘッドと、アルゴリズムに関する一意性を確保することの難しさ/コストを考慮する必要があります。多くの比較を行うことが予想され、そのような最適化が本当に必要な場合は、オブジェクトを不変にし、オブジェクトの作成時にハッシュを計算するという考えがあります。あなたがそうする可能性は低いです:)

于 2013-06-15T23:12:29.917 に答える