Loading

List.contains 查重和 HashSet 查重区别

ArrayList.contains(tmp) 使用的是 equals()。

它会遍历 ans 中已有的三元组,逐个判断是否和 tmp 相等。可以近似理解成:

for (List<Integer> existing : ans) {
    if (tmp.equals(existing)) {
        return true;
    }
}
return false;

而 List.equals() 比较的是:长度相同,并且对应位置的元素都通过 equals() 判断相等。

Arrays.asList(-1, 0, 1).equals(Arrays.asList(-1, 0, 1)); // true
Arrays.asList(-1, 0, 1).equals(Arrays.asList(0, -1, 1)); // false

里面的元素是 Integer,它的 equals() 比较整数值。因此,即使是两个新建的 List,只要内容和顺序一致,contains 就能识别出来。

对比:

  • ==:对于 List,判断是不是同一个对象。
  • List.equals():判断元素和顺序是否相同。
  • HashSet:先通过 hashCode() 定位,再用 equals() 判断是否重复;哈希值相同不代表一定相等。

因此同样是判断是否存在,ArrayList 和 HashSet 时间复杂度一个是 o(m) 一个是 o(1)。

posted @ 2026-09-16 20:21  wsttask  阅读(10)  评论(0)    收藏  举报