java基础

java-arrayList和linkedList区别

2018-08-13  本文已影响44人  一个喜欢烧砖的人
arrayList和linkedList的相同点
arrayList和linkedList的不同点
   * @return {@code true} (as specified by {@link Collection#add})
     */
    public boolean add(E e) {
        linkLast(e);
        return true;
    }

    /**

而linkedlist因为使用了链表结构,因此不需要维护容量大小
总结:linkedList 使用了链表,不需要扩容,所以不存在添加数据是还要存在扩容是否复制数据的问题,所以性能存在优势,但是正因为是链表,所以每次添加都需创建一个entry对象,对性能有一定的影响

2、任意位置添加元素
arrayList:

    * @throws IndexOutOfBoundsException {@inheritDoc}
     */
    public void add(int index, E element) {
        rangeCheckForAdd(index);

        ensureCapacityInternal(size + 1);  // Increments modCount!!
        System.arraycopy(elementData, index, elementData, index + 1,
                         size - index);
        elementData[index] = element;
        size++;
    }

arrayList是基于数组实现的,所以每次在一个位置添加元素之后,之后的数据都会往后移动一个位置(需要重新排列),添加的元素越往前,消耗越大(重新排列的数据越多);
linkedList:
因为linkedList是链表结构,中间添加元素和尾部添加元素的开销是一样的

     * @throws IndexOutOfBoundsException {@inheritDoc}
     */
    public void add(int index, E element) {
        checkPositionIndex(index);

        if (index == size)
            linkLast(element);
        else
            linkBefore(element, node(index));
    }

    /**

2.在ArrayList的 中间插入或删除一个元素意味着这个列表中剩余的元素都会被移动;而在LinkedList的中间插入或删除一个元素的开销是固定的。

3.LinkedList不 支持高效的随机元素访问。

4.ArrayList的空 间浪费主要体现在在list列表的结尾预留一定的容量空间,而LinkedList的空间花费则体现在它的每一个元素都需要消耗相当的空间

可以这样说:当操作是在一列 数据的后面添加数据而不是在前面或中间,并且需要随机地访问其中的元素时,使用ArrayList会提供比较好的性能;当你的操作是在一列数据的前面或中 间添加或删除数据,并且按照顺序访问其中的元素时,就应该使用LinkedList了。

所以,如果只是查找特定位置的元素或只在集合的末端增加、移除元素,那么使用Vector或ArrayList都可以。如果是对其它指定位置的插入、删除操作,最好选择LinkedList

上一篇下一篇

猜你喜欢

热点阅读