Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 数组按值索引_Java_Arrays_Indexing_Compare - Fatal编程技术网

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很少有好的理由使用它,事实上,这是我能想到的唯一一个,因为它避免了循环后的冗余条件检查。