zoukankan      html  css  js  c++  java
  • JAVA基础:ArrayList和LinkedList区别

    • 1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。 
    • 2.对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。 
    • 3.对于在指定index位置新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。 
    • 4.ArrayList中的操作不是线程安全的!所以,建议在单线程中才使用ArrayList,而在多线程中可以选择Vector或者CopyOnWriteArrayList。LinkedList线程安全的处理方法

        方法一:List<String> list = Collections.synchronizedList(new LinkedList<String>());
        方法二:将LinkedList全部换成ConcurrentLinkedQueue

    • 为什么在创建ArrayList对象时要初始化默认容量?

       其实就是为了避免扩容,ArrayList扩容方法,这里 ensureCapacityInternal  才是ArrayList内部调用的扩容方法

    /**
    * 公有方法
    */
    public void ensureCapacity(int minCapacity) {
    int minExpand = (elementData != DEFAULTCAPACITY_EMPTY_ELEMENTDATA)
    // any size if not default element table
    ? 0
    // larger than default for default empty table. It's already
    // supposed to be at default size.
    : DEFAULT_CAPACITY;

    if (minCapacity > minExpand) {
    ensureExplicitCapacity(minCapacity);
    }
    }

    private void ensureCapacityInternal(int minCapacity) {
    if (elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA) {
    minCapacity = Math.max(DEFAULT_CAPACITY, minCapacity);
    }

    ensureExplicitCapacity(minCapacity);
    }

    private void ensureExplicitCapacity(int minCapacity) {
    modCount++;
    // overflow-conscious code
    if (minCapacity - elementData.length > 0)
    grow(minCapacity);
    }


    扩容的大小为原容量的1.5倍+1(其实是>>1),该方法下有会改变
    modCount的值
    modCount变量用于在遍历集合(iterator())时,检测是否发生了add、remove操作。

    boolean add(E e) ;//在尾部加入元素
    void add(int index, E element) ;//在指定位置加入元素

    因为调用arraycopy,所以效率低。(但是也没低到哪去 执行100次 每次插入1百万条,查了0.016s)

    System.arraycopy(elementData, index, elementData, index + 1,size - index);
    不积跬步无以至千里
  • 相关阅读:
    LAMP
    监控和安全运维 1.8 zabbix服务端安装
    监控和安全运维 1.7 nagios配置邮件告警
    易道用车-拿什么说爱你
    unix exec族函数 关于参数的疑惑
    关于 Unix 用户权限及进程权限及 Saved set-user-id
    ANSI C中关于FILE流的一些
    Filco minila 的蛋疼。
    IIS32位,64位模式下切换
    Gvim+Emmet.vim 那些事。
  • 原文地址:https://www.cnblogs.com/showme1942/p/10059559.html
Copyright © 2011-2022 走看看