二话不说,我们直接看JDK中LinkedList的indexOf方法实现
public int indexOf(Object o) { int index = 0; if (o == null) { for (Node<E> x = first; x != null; x = x.next) { if (x.item == null) return index; index++; } } else { for (Node<E> x = first; x != null; x = x.next) { if (o.equals(x.item)) return index; index++; } } return -1; }
o.equals(x.item)这行代码如果改成
x.item!=null && x.item.equals(o)会更好。为什么?表面上看好像只是把o.equals(x.item)改成x.item.equals(o)
但是你想一下。假设你List中存的是一个自己定义的对象:
class Player{ private int id; private String name; }然后,你想在List<Player>中通过id找到玩家所在下标(先不考虑用Map来存id和玩家实例的映射,因为这个例子只是随便举的)。
这时候,indexOf(id)返回的总是-1,因为调用的是:id.euqlas(x.item),而Integer的equals传入一个Player类型势必返回false。
但是,如果LinkedList的实现是x.item.equals(o),那么你就可以通过重写Player的equals方法,使得和Integer类型比较的时候比较id字段。这样灵活性就更高了。
好吧,吐槽完还是自己写个查找的方法吧。
吐槽JDK中LinkedList的indexOf方法实现,布布扣,bubuko.com
原文:http://blog.csdn.net/kakashi8841/article/details/20637849