Rom*_*nko 3 java arrays containers
我需要比较两个byte []数组的元素,但只能达到固定长度.对于我使用的整个阵列java.util.Arrays.equals().当然我可以复制子范围(Arrays.copyOf()),但我不想这样做.我也确信在没有新的实用程序方法实现的情况下应该有标准的方法.
我正式需要的是:
java.util.Arrays.equals(byte[] a, byte [] b, int length)
Run Code Online (Sandbox Code Playgroud)
有什么意义吗?我没有看到广泛使用的方法.
再次提出要求防止错误答案: - 数组等于长度限制. - 我有手动实现,但我想用标准的东西替换它. - 我不想要任何副本.
先感谢您.
ByteBuffer提供类似于@meriton提出的东西,但可以使用原语.这是说明性代码:
import java.nio.ByteBuffer;
public class Main {
public static void main(String [] args) throws Exception {
byte [] a1 = {0, 1, 0, 1};
byte [] a2 = {0, 0, 1, 0};
boolean eq = ByteBuffer.wrap(a1,0,3).equals(ByteBuffer.wrap(a2,1,3));
System.out.println("equal: " + eq);
}
}
Run Code Online (Sandbox Code Playgroud)
@meriton回答的属性:
这个答案很特别.
ByteBuffer.array()返回对原始数组的引用(可能是不利的,可能是有利的).你可以这样做:
Arrays.asList(a).subList(0,n).equals(Arrays.asList(b).subList(0,n))
Run Code Online (Sandbox Code Playgroud)
您可以通过Arrays.equals的源代码来构建您的方法.
public static boolean equals(byte[] a, byte[] a2, int length) {
if (a==a2)
return true;
if (a==null || a2==null)
return false;
for (int i=0; i<length; i++)
if (a[i] != a2[i])
return false;
return true;
}
Run Code Online (Sandbox Code Playgroud)
这个特性是在 Java 9 中添加的。给定数组 a 和数组 b,你会这样做:
//with char array
Arrays.compare(a, startIndex_A, endIndex_A, b, startIndex_B, endIndex_B);
//with byte, short, int, long arrays
Arrays.compareUnsigned(a, startIndex_A, endIndex_A, b, startIndex_B, endIndex_B);
Run Code Online (Sandbox Code Playgroud)