Java 数组按值索引
我有以下变量:Java 数组按值索引,java,arrays,indexing,compare,Java,Arrays,Indexing,Compare,我有以下变量: byte[][] bytes; byte[] value; 是否有一种聪明的方法来查找字节中值的第一个匹配项的索引 值与字节中的条目不是同一个对象,它只是具有相同的内容 当然你可以这样做: int idx = -1; for(int i=0;i<bytes.length;i++) { if(Arrays.equals(value, bytes[i])) { idx = i; break; } } // idx is index or -
byte[][] bytes;
byte[] value;
是否有一种聪明的方法来查找字节中值的第一个匹配项的索引
值
与字节
中的条目不是同一个对象,它只是具有相同的内容
当然你可以这样做:
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
intidx=-1;
对于(int i=0;i我会更改代码,这样您就不需要进行条件检查
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
}
找到:{
for(int i=0;i
因为你只是在谈论字节数组……不
您在示例代码中所拥有的是实现这一点的方法;您将不得不逐字节比较它们。这很可能是完全可以接受的
“使之更容易”的唯一方法是将字节数组封装在一个对象中,该对象提供了一种使用独特的哈希算法比较它们的方法(请参见:equals()
和hashcode()
)即使这样,你也需要考虑计算哈希的开销,以及确保算法的唯一性的困难/成本。如果你期望做很多比较,并且确实需要这种优化,那么它会使对象不可变,并且在对象创建时计算散列;这是不可能的。是的:)好的,谢谢你的回答。我只是想知道,因为我以前经常发现这样的问题有一个解决方案:)很酷,多年来一直在编写Java代码,但我甚至不知道:D@AyCe:那是因为你是这基本上是一个后路。当然,如果使用得当,它可以很好地工作,但是代码很容易被它们弄乱。@code Guru,这只会打破循环。这将确保在找到“未找到”时不会运行该代码。i、 e.“goto”不仅仅是循环的结束。@Patrick很少有好的理由使用它,事实上,这是我能想到的唯一一个,因为它避免了循环后的冗余条件检查。