contains()用于判断元素是否在collection中,依赖equals()比较;自定义类须重写equals()和hashcode();arraylist为o(n),hashset平均o(1),treeset为o(log n);数组需转集合或遍历;map用containskey()/containsvalue(),后者性能差;concurrenthashmap的containsvalue()无强一致性保证。
用 contains() 判断元素是否在 Collection 中
绝大多数 Java 集合(ArrayList、LinkedList、HashSet、TreeSet 等)都继承自 Collection 接口,因此直接支持 contains() 方法。它内部调用元素的 equals() 方法比较,而非 ==。
常见错误:对自定义类未重写 equals()(和 hashCode(),尤其在 HashSet 中),导致 contains() 始终返回 false,即使内容相同。
-
ArrayList的contains()是 O(n) 时间复杂度,逐个遍历比较 -
HashSet的contains()平均是 O(1),但依赖正确实现的hashCode() -
TreeSet的contains()是 O(log n),要求元素可比较(实现Comparable或传入Comparator)
数组不能直接用 contains(),得转成集合或手动遍历
Java 数组不是 Collection,没有 contains() 方法。常见误写 myArray.contains(x) 会编译报错。
安全做法取决于场景:
立即学习“Java免费学习笔记(深入)”;