Java:.contains 和 .equals

标签 java equals contains

我正在尝试执行一个程序,将两个链表中的元素相互比较。 一种方法是,我可以执行两个 for 循环并遍历两个列表,使用 .equals() 比较 list1 和 list2 中的每个元素。 另一种方法是,只是遍历第一个列表并检查 list1.contains(list1.get(i)) .. java 文档说,.contains 在内部执行 .equals。 如果是这样的话,与后者相比,前者的运行时间如何更长? 我误解了文档吗?如果我这样做了,当我使用 contains 时,内部比较究竟是如何进行的?

            using equals:
            for (int i = 0; i < list_one.size(); i++) {
              for (int j = 0; j < list_one.size(); j++) {
                  if (list_one.get(i).equals(list_two.get(j))) { count++; }

            using contains:
            for (int i = 0; i < list_one.size(); i++) {
                 if (list_two.contains(list_one.get(i)) == true) { count++; }

最佳答案

一旦 equals 返回 true,contains 的实现将停止迭代,因此如果您要查找的元素位于列表的开头。如果您的版本不这样做,那就可以解释为什么它变慢了。

PS:无论哪种方式,运行时间仍然是二次方的。有更聪明的方法来解决这个问题,不需要为第一个列表中的每个项目迭代第二个列表(例如,首先对两个列表进行排序或使用集合)。

关于Java:.contains 和 .equals,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9042685/

相关文章:

java - 服务类和 DAO 类在做同样的事情。为什么你需要他们两个?

java - 将 python 文件捆绑到 jar 中以通过 jython 访问

c# - Hashtable A 等于 HashtAble B 控件

java - 如何搜索内容与另一个数组匹配的一个数组?

XSLT 包含两个句点

python - 在 pandas 数据框中查找包含子字符串的值

java - 如何在我的 Eclipse 插件中监听用户退出?

java - 如何获取微调器值的整数值?

.NET object.Equals(object, object) 的 Java 等价物

java - Java中调用父类(super class)的equals方法