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++;
}
在此示例中,以这种方式执行此操作可避免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++;
    }
}