为什么Java集合中的contains()/ indexOf()使用o.equals(e)而不是e.equals(o)?

Fer*_*ndo 2 java collections equals

为什么这些方法contains()indexOf()使用已定义的Java集合框架o.equals(e),而不是e.equals(o)(其中o是方法的参数,并且e是该元素的集合)?

谁知道原因?

Dav*_*d M 16

因为o已知不是null,但e不一定.从以下代码中获取此示例LinkedList:

for (Entry e = header.next; e != header; e = e.next) {
    if (o.equals(e.element))
        return index;
    index++;
}
Run Code Online (Sandbox Code Playgroud)

在此示例中,以这种方式执行此操作可避免e.element为集合中的每个项目保护以防止为null.这是考虑为onull 的完整代码:

if (o == null) {
    for (Entry e = header.next; e != header; e = e.next) {
        if (e.element == null)
            return index;
        index++;
    }
} else {
    for (Entry e = header.next; e != header; e = e.next) {
        if (o.equals(e.element))
            return index;
        index++;
    }
}
Run Code Online (Sandbox Code Playgroud)