为什么使用 Java 21(孵化器)中的 Java Vector API,我比较两个向量并将结果复制到数组中。它会出现异常:
java.lang.IndexOutOfBoundsException: Index 4 out of bounds for length 2
没有接受掩码的方法:v3.intoArray(result, i, mask);
。
如何使用向量 api 比较数组并将结果复制到另一个数组?
int[] a1 = new int[] {1, 2, 3, 4, 5};
int[] a2 = new int[] {1, 2, 3, 4, 5};
boolean[] result = new boolean[] {false, false, false, false, false};
var species = IntVector.SPECIES_PREFERRED;
for (int i = 0; i < a1.length; i += species.length()) {
var mask = species.indexInRange(i, a1.length);
var v1 = IntVector.fromArray(species, a1, i, mask);
var v2 = IntVector.fromArray(species, a2, i, mask);
VectorMask<Integer> v3 = v1.eq(v2);
v3.intoArray(result, i)
// v3.intoArray(result, i, mask); - no method wtih mask ! here exception
}
您应该声明结果,以便它可以容纳species.length()的倍数。这将评估结果:
int[] a1 = new int[] {1, 2, 3, 4, 5};
int[] a2 = new int[] {1, 2, 3, 4, 5};
boolean[] result = new boolean[8];
var species = IntVector.SPECIES_PREFERRED;
for (int i = 0; i < a1.length; i += species.length()) {
var mask = species.indexInRange(i, a1.length);
var v1 = IntVector.fromArray(species, a1, i, mask);
var v2 = IntVector.fromArray(species, a2, i, mask);
VectorMask<Integer> v3 = v1.eq(v2);
v3.intoArray(result, i);
}
System.out.println(Arrays.toString(Arrays.copyOf(result, a1.length)));