我有以下变量:
byte[][] bytes;
byte[] value;
是否有一种智能方法可以在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
我只是想知道它是否可以变得更容易。
答案 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()
) 。即使这样,您也需要考虑计算哈希的开销,以及确保算法唯一性的难度/成本。如果你期望进行许多比较并且真的需要那种优化,那么就会想到对象是不可变的并且在对象创建时计算哈希值;你不太可能这样做:)