查找多维数组是否在Java数组中
我有一个数组-与此类似:
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");
}
}
}
}
我需要检查数组中是否有值,但是,这是我发现唯一有效的方法,而且效率非常低
既然大多数内置方法似乎不起作用,有没有更好的方法来实现这一点
我还试着使用一个集,它有同样的问题
# 1 楼答案
另一种方法是将数组存储/散列为StringBuilder,并将其与多维数组中形成的StringBuilder进行比较
对于字符串操作,StringBuilder比String更快。代码如下:
# 2 楼答案
这很简单:永远不要转换为字符串。试试
deepEquals
它应该做你想做的事情,当然你首先必须深入myArray
并迭代元素这将在大约4.5%的时间内执行测试集的contains函数
当涉及到对象(包括其他数组)上的数组时,Java具有类型擦除功能。因此,在使用
Arrays.equals(String[], String[])
的地方自己创建deepEquals(String[][], String[][])
可能会稍微快一些,因为在运行时不必检查对象是否是String
的数组,也不必检查是否有嵌套得更深的数组这将在大约3.5%的时间内执行测试集的contains函数,但只比上面的测试稍微复杂一些
作为一般提示:当涉及到字符串时,计算机是没有效率的(尽管较新的Java版本确实在某种程度上解决了这一问题)。无论如何,永远不要转换为字符串,以进行任何比较、计算、连接或诸如此类的操作。始终比较字节、整数或对象(即原始数据),除非确实没有其他方法
如果您只有一个字符列表,则有两个观察结果:
char[][]
也应该起作用李>String[]
,其中字符串由各种字符组成(您可以使用String#charAt(index)
检索这些字符,并使用String#equals(other)
进行比较)使用后者,您可以将搜索时间减少到2%左右