当前位置: 首页 > 面试题库 >

为什么我们有contains(Object o)而不是contains(E e)?

谷梁鸣
2023-03-14
问题内容

是否要保持与旧版本(未生成)的向后兼容性Collection?还是我缺少一个更微妙的细节?我在removeremove(Object o))中也看到了这种模式,但是add归纳为add(E e)


问题答案:

contains()``Object之所以使用,是因为它匹配的对象不必与您传递给的对象具有相同的类型contains();它只要求它们相等。根据规范contains()contains(o)如果存在e这样的对象,(o==null ? e==null : o.equals(e))则返回true。请注意,没有什么要求,o并且e必须是相同的类型。这是因为该equals()方法接受一个Objectas参数,而不仅仅是与该对象相同的类型。

尽管通常已经equals()定义了许多类,以便其对象只能等于其自己的类的对象,这确实是正确的,但事实并非总是如此。例如,针对的规范List.equals()说,即使两个List对象都是Lists并且具有相同的内容,即使它们是List的不同实现,它们也是相等的。所以回来的例子在这个问题上,可以有一个Collection<ArrayList>和我打电话给contains()一个LinkedList作为参数,如果存在具有相同内容的列表,它会返回true。如果contains()是通用的并且将其参数类型限制为,则这是不可能的E

实际上,contains()将任何对象作为参数的事实允许一种有趣的用法,您可以使用它来测试集合中满足某个属性的对象的存在:

Collection<Integer> integers;
boolean oddNumberExists = integers.contains(new Object() {
    public boolean equals(Object e) {
        Integer i = (Integer)e;
        if (i % 2 != 0) return true;
        else return false;
    }
});


 类似资料:
  • 查看地图是否包含必需的密钥。 语法 (Syntax) 以下是语法。 (contains hmap key) Parameters - 'hmap'是散列键和值的映射。 'key'是需要在地图中搜索的键。 Return Value - 如果键存在则返回true值,否则返回false。 例子 (Example) 以下是包含的示例? 在Clojure。 (ns clojure.examples.exa

  • 找出该集合是否包含某个元素。 语法 (Syntax) 以下是语法。 (contains? setofelements searchelement) Parameters - 'setofelements'是元素集。 “Searchelement”是需要在列表中搜索的元素。 Return Value - 如果元素存在于集合中,则返回true;如果元素不存在,则返回false。 例子 (Exampl

  • 如果此List包含指定的值,则返回true。 语法 (Syntax) boolean contains(Object value) 参数 (Parameters) Value - 要在列表中查找的值。 返回值 (Return Value) 是真还是假,具体取决于列表中是否存在该值。 例子 (Example) 以下是此方法的使用示例 - class Example { static voi

  • 检查范围是否包含特定值。 语法 (Syntax) boolean contains(Object obj) 参数 (Parameters) Obj - 要在范围列表中检查的值。 返回值 (Return Value) 如果此Range包含指定的元素,则返回true。 例子 (Example) 以下是此方法的使用示例 - class Example { static void main(St

  • A version of Sequence#contains which returns an AsyncHandle. Signature AsyncSequence.contains = function(value) { /*...*/ } AsyncSequence.contains = function contains(value) { var found = false;

  • Checks if this sequence contains a given substring. Signature StringLikeSequence.contains = function(substring) { /*...*/ } StringLikeSequence.contains = function contains(substring) { return this.i