• 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);
    不积跬步无以至千里
  • 相关阅读:
    不断学习和思考让自己成长、过得充实快乐!
    先制订个能力提升计划
    如何删除SQL Server下注册的服务器
    [转摘] 我的同学聚会--性格决定命运
    如何提高阅读速度2
    Oracle IW,WW的区别
    想象5年后的你(很多人看了很受启迪!)
    女要富养
    5年内买车买房(理财篇)
    [转摘] 从月薪3500到身价700万 我在上海的奋斗岁月
  • 原文地址:https://www.cnblogs.com/showme1942/p/10059559.html
Copyright © 2020-2023  润新知