听说你又忘了Vector,ArrayList,LinkedList?

原创
2019/10/25 14:38
阅读数 134

    说起Vector,ArrayList,LinkedList  想必Java开发者都已经非常熟悉,这三个类基本上每月甚至每周都有人发出一遍来,故此网友将此类博客或回帖称之为挖坟。

    孔老夫子说得好啊,“温故而知新,可以为师矣”(我确定不是鲁迅说的)。

    

    即便是咱们记得滚瓜烂熟的类啊函数啊,有时候还是有必要拉出来回顾一下。

    我先不说这三个类有什么定义上的区别。咱们先从性能指数来看看,同样的添加和删除10w和整数,在添加和删除的耗时情况。

    

    插入速度:不太明显的是,在插入方面LinkedList要快Verctor和ArrayList大概不到2倍。当然了,在少量的数据上,效果差异并没有太大区别。所有离开场景的比对都是耍流氓,要说明的是Vector在插入元素时在方法上加了锁,各位同学想必都知道锁是一种安全但CPU开销很大的东西。所以一般来说不管是自己实现的方法还是原生的,要慎重判断是否需要使用锁。

public synchronized boolean add(E e) {
    modCount++;
    ensureCapacityHelper(elementCount + 1);
    elementData[elementCount++] = e;
    return true;
}

    删除速度:这个差距就非常明显了,LinkedList怎么这么优秀?那还用什么ArrayList?嘿嘿,别着急啊,看看访问速度先。

 

    

    访问速度:哇去,竟然差这么多?刚刚还夸你优秀,我用你个鬼,你个糟老集合坏得很。这其实是因为它的实现是双向链表的原因,访问某个元素是只能是一直寻找next,找到了才返回,不能通过下标找到。

public boolean remove(Object o) {
    if (o == null) {
        for (Node<E> x = first; x != null; x = x.next) {
            if (x.item == null) {
                unlink(x);
                return true;
            }
        }
    } else {
        for (Node<E> x = first; x != null; x = x.next) {
            if (o.equals(x.item)) {
                unlink(x);
                return true;
            }
        }
    }
    return false;
}

所以到这里大家知道怎么选择使用自己需要的集合了吧?

 

展开阅读全文
加载中

作者的其它热门文章

打赏
0
0 收藏
分享
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部