Matlab如何用for循环找出两个数组中的相同元素

这是一个陷阱,不要使用嵌套循环来查找重复元素。

Java如何判断两个String数组有无相同元素

简单来说,两级for循环比较两个数组的元素是否相等。
其实很简单:外层遍历一个数组,内层遍历另一个数组进行一一比较。
我们去年做的一个项目中,用Java在这个脚本中写入大约3 000级数据需要几秒钟的时间。
后来优化为使用HashMap存储另一个数组元素然后检查它,速度快了1 00倍。

我们先来说说最重要的事情。
外部 for 循环获取 AString 数组的每个元素,内部 for 循环获取 BAString 数组的每个元素并将其与 equals() 函数进行比较。
注意,比较字符串时,必须使用 equal() 方法,而不是直接使用 ==。
还有一点是内循环一旦找到匹配就可以返回true。
在继续外循环之前,不要愚蠢地运行整个内循环。
还有一个更重要的细节。
如果数组 AString 有很多元素而 B 有很少的元素,则相反的情况应该成立。
首先遍历B并用HashMap存储,然后检查A。
这将时间复杂度从O(nm)降低到O(n+m)。

一开始我以为两个for可以直接比较,但是去年跑测试的时候发现不对劲:当AString数组有5 000个元素,BAString有1 000个元素时,两层for直接溢出内存。
后来我加了一个计数器,发现最外层完成3 000条后,就在匹配之前就断掉了,节省了9 0%的时间。

一个简单的陷阱提醒:使用equals()方法进行比较时,一定要处理空值,否则程序会崩溃。
我认为使用HashMap来优化它是值得尝试的,尤其是当两个数组的元素数量差异特别大时。