0

我有以下变量:

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

有没有一种聪明的方法可以找到 in 的第一个匹配条目的value索引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 回答