我有以下变量:
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
我只是想知道是否可以变得更容易。
最佳答案
因为你只是在谈论字节数组......不。
示例代码中的内容就是执行此操作的方法;你必须逐字节地比较它们。这很可能是完全可以接受的。
“让事情变得更容易”的唯一方法是将字节数组封装在一个对象中,该对象提供了一种使用独特的哈希算法来比较它们的方法(请参阅:equals()
和 hashcode()
)。即使这样,您也需要考虑计算哈希的开销,以及确保算法唯一性的难度/成本。如果您希望进行多次比较并且确实需要这种优化,则可以考虑使对象不可变并在对象创建时计算哈希值;你不太可能这样做:)
关于java - 数组-数组按值索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17128742/