数组数组索引值

时间:2013-06-15 23:07:09

标签: java arrays indexing compare

我有以下变量:

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

是否有一种智能方法可以在value中找到bytes的第一个匹配条目的索引?

valuebytes中的条目不同,只是内容相同。

当然你可以这样做:

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

我只是想知道它是否可以变得更容易。

2 个答案:

答案 0 :(得分: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
}

答案 1 :(得分:1)

因为你刚才谈的是字节数组......没有。

您的示例代码中包含的是执行此操作的方法;你将不得不逐字节地比较它们。而且这很可能是完全可以接受的。

关于“简化”的唯一方法是将字节数组封装在一个对象中,该对象提供了一种使用唯一散列算法比较它们的方法(参见:equals()hashcode()) 。即使这样,您也需要考虑计算哈希的开销,以及确保算法唯一性的难度/成本。如果你期望进行许多比较并且真的需要那种优化,那么就会想到对象是不可变的并且在对象创建时计算哈希值;你不太可能这样做:)