首页 > 其他 > 详细

吐槽JDK中LinkedList的indexOf方法实现

时间:2014-03-06 23:21:38      阅读:688      评论:0      收藏:0      [点我收藏+]

二话不说,我们直接看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

吐槽JDK中LinkedList的indexOf方法实现

原文:http://blog.csdn.net/kakashi8841/article/details/20637849

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!