gpt4 book ai didi

java - 查找多维数组是否在数组Java中

转载 作者:行者123 更新时间:2023-12-05 03:33:27 24 4
gpt4 key购买 nike

我有一个数组数组 - 与此类似:

import java.util.Arrays;

public class test {
public static void main(String[] args)
{

String[][] A = { { "a", "b", "c" }, { "d", "e", "f" }, { "g", "h", "-" } };
String[][] B = { { "-", "e", "b" }, { "a", "h", "c" }, { "d", "g", "f" } };
String[][] C = { { "a", "b", "c" }, { "d", "e", "f" }, { "g", "h", "-" } };
String[][][] myArray = { A, B};

for (String[][] s : myArray) {
System.out.println(Arrays.deepToString(s));
if (Arrays.deepToString(s).equals(Arrays.deepToString(C))) {
System.out.println("true");
}
}
}
}

我需要检查一个值是否在数组中,但是,这是我发现唯一有效的方法,而且效率很低。

由于大多数内置方法似乎不起作用,是否有更好的方法来做到这一点?

我也尝试过使用 Set 并且遇到了同样的问题。

最佳答案

这很简单:永远不要转换为字符串。试试 deepEquals 它应该做你想做的事,当然你首先必须深入你的 myArray 并迭代元素。

public static boolean contains(String[][][] set, String[][] obj) {
for (String[][] elt : set) {
if (Arrays.deepEquals(elt, obj)) {
return true;
}
}
return false;
}

这会在大约 4.5% 的时间内为您的测试集执行包含功能。


当涉及对象上的数组(包括其他数组)时,Java 具有类型删除功能。因此,在使用 Arrays.equals(String[], String[])< 的地方自己创建 deepEquals(String[][], String[][]) 可能会稍微快一些,因为您不必在运行时检查对象是否为 String 数组,也不必检查是否有嵌套得更深的数组。

public static boolean fasterContains(String[][][] set, String[][] obj) {
for (String[][] elt : set) {
if (deepEquals(elt, obj)) {
return true;
}
}
return false;
}

private static boolean deepEquals(String[][] a, String[][] b) {
int n = a.length;
if (b.length != n) {
return false;
}

for (int i = 0; i < n; i++) {
if (!Arrays.equals(a[i], b[i])) {
return false;
}
}
return true;
}

这会在大约 3.5% 的时间内为您的测试集执行 contains 函数,同时只比上面的测试稍微复杂一些。


一般性提示:计算机在处理字符串时效率不高(尽管较新的 Java 版本确实在一定程度上解决了这个问题)。无论如何,永远不要转换为字符串 以进行任何比较、计算、连接或诸如此类的事情。始终比较字节、整数或对象(即原始数据),除非确实没有其他方法。


如果您只有一个字符列表,那么有两个观察结果:

  • char[][] 也应该有效;
  • 或者只是一个 String[] 当然,其中 String 由各种字符组成(您可以使用 String#charAt(index) 检索它们并使用 字符串#等于(其他)

使用后者,您可以将搜索时间减少到大约 2%。

关于java - 查找多维数组是否在数组Java中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70317661/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com