java - 如何比较两个java数组的前n个字节?

标签 java arrays

我需要比较两个不同的 java byte[] 数组的前 n 个字节。有 Arrays equals() 函数,但它首先测试数组的长度,然后测试整个两个数组,我的数组长度不同,所以这不好。

除了手动编写我自己的循环之外还有什么想法吗?

谢谢,

最佳答案

为什么您不想手动编写自己的循环?你可以只 Arrays复制出一个subset然后再次使用它来compare :-

byte[] a1 = Arrays.copyOfRange(array1, 0, n);
byte[] a2 = Arrays.copyOfRange(array2, 0, n);
boolean equal = Arrays.equals(a1, a2);

如果效率是一个问题,那么 System.arraycopy是一种更快但更冗长的复制数组的方法。

如果效率确实是一个问题并且冗长不是那么循环可能是最好的方法。

 boolean matched = true;
 for (int i=0; i<n; i++){
   if (array1[i] != array2[i]) {
     matched = false;
     break;
   }
 }

这是因为您可以在看到不匹配的字节后立即停止搜索。如果第一个字节不匹配,我们正在比较 100 个字节,在第一个解决方案中,我们在后台复制 2 批 100 个字节,创建两个 100 个字节的数组,然后比较 100 个字节集,尽管它会停止在第一个。在循环中,这是循环中的一次迭代,发现、标记不匹配,然后我们就完成了。

Java 8(更新)

通过创建 Stream 可以更简洁地在 Java 8 语法中完成与上述相同的事情要比较的索引号(使用 IntStream )并执行 allMatch在流中使用 Predicate比较流中每个索引处的两个数组,如下所示:-

//Both arrays must match at all indices between 0 and n
boolean matched = IntStream.range(0, n).allMatch(i -> array1[i] == array2[i]);
//...Of course if you are comparing non simple types, you would need to use equals()

关于java - 如何比较两个java数组的前n个字节?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26546387/

相关文章:

Java 代码不允许我从一个类调用另一个类的方法

java - 哪个 TaskExecutor 用于异步日志记录?

Java:线程安全的id生成器(同步问题)

java - 如何正确关闭非阻塞套接字 channel ?

javascript - 返回经过过滤的对象数组

java - 如何通过char数组查找String数组?

java - 使用 Jackson 映射 Json 时出现问题

ios - 如何在 Swift 中将新项目添加到我的多类型数组

c++ - 确定字符串是否具有所有唯一字符

python - 在 numpy 数组中组合逻辑语句 AND