gpt4 book ai didi

java - Arrays.equals() 的时间复杂度

转载 作者:搜寻专家 更新时间:2023-11-01 01:42:59 24 4
gpt4 key购买 nike

我有两个从两个字符串生成的 char 数组。我想确定这两个数组是否相等。

str1Array = str1.toCharArray();
str2Array = str2.toCharArray();

我的理解是 str1Array.equals(str2Array) 只有当数组对象是内存中的同一对象时才会返回 true。如果我想检查每个索引是否相同,我应该使用 Arrays.equals(str1Array, str2Array)

我想知道这个 equals 方法的复杂性。

我假设它不能是 O(1),因为它无法在不检查每个索引的相等性的情况下评估数组对象的内容相等性。我的猜测是它是 O(n),其中 n 对应于 min(str1Array.length, str2Array.length)

谁能证实这一点或发表评论?

最佳答案

好吧,让我们看一下源码:

public static boolean equals(Object[] a, Object[] a2) {
if (a==a2)
return true;
if (a==null || a2==null)
return false;

int length = a.length;
if (a2.length != length)
return false;

for (int i=0; i<length; i++) {
Object o1 = a[i];
Object o2 = a2[i];
if (!(o1==null ? o2==null : o1.equals(o2)))
return false;
}

return true;
}

(该方法的其他变体大致相同)。

正如我们所见,它正在遍历数组。因此它的最坏情况复杂度为 O(n),其中 n 是比较的数组的长度。 (如果数组大小不同,则它会立即退出,使其成为 O(1))。

然而,它并不总是需要那么长时间。它确实有一些相等性、空值检查和长度检查的先决条件。它也会在找到匹配项后立即退出,因此花费的时间会少很多。

关于java - Arrays.equals() 的时间复杂度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24211216/

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