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);
    不积跬步无以至千里
  • 相关阅读:
    gulp-css-spriter 将css代码中的切片图片合并成雪碧图
    通过JS模拟select表单,达到美化效果[demo]
    jQuery拖拽 & 弹出层
    sublime text 快速编码技巧 GIT图
    原生JS不到30行,实现类似javascript MVC的功能-minTemplate
    javascript拖拽原理与简单实现方法[demo]
    滚动焦点图实现原理和实践[原创视频]
    谈一谈值类型与引用类型和装箱与拆箱
    【原创】asp.net内部原理(三) 第三个版本 (最详细的版本)
    由JS函数返回值引发的一场”血案"
  • 原文地址:https://www.cnblogs.com/showme1942/p/10059559.html
Copyright © 2011-2022 走看看