锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

ArrayList扩容规则

时间:2022-09-25 01:30:00 amy限时继电器

1----ArrayList

1.1—ArrayList如何扩容?

  • 第一次扩容10,以后每次扩容1.5倍,扩容通过位运算右移1位。

1.2—ArrayList 如何处理频繁扩容导致添加性能急剧下降?

  • 若需要将大量数据添加到集合中,则提前定义ArrayList收集的初始容量不需要花费大量时间在自动扩时间

1.3—ArrayList插入或删除元素是否一定比例LinkedList慢?

  • 在集合里面插入元素速度比对结果为:第一次插入,LinkedList中间和尾部插入,ArrayList更快;
  • 在集合里面删除元素相似,第一部删除,LinkedList更快;中间删除和尾部删除,ArrayList更快;

1.4— ArrayList 线程安全吗?

  • 因此,得出结论,ArrayList不是线程安全的集合!如需确保线程安全,建议使用Vector集合,线程安全,但是相对于ArrayList效率相对较低。

  • 而Vector相对于ArrayList线程安全的原因在于它add()集合添加元素的方法:

    // 可以看出Vector的add方法加上了synchronized 同步关键字 public synchronized void addElement(E obj) { 
                       modCount ;         ensureCapacityHelper(elementCount   1);         elementData[elementCount ] = obj; } 

1.5–ArrayList如何并发修改而不出现异常并发修改?

为解决此问题呢,java引入了一个可以保证读和写都是线程安全的集合(读写分离集合):CopyOnWriteArrayList

因此,解决方案是:

// private static ArrayList list = new ArrayList<>();     // 用读写分离集合替换原来的ArrayList     private static CopyOnWriteArrayList<String> list = new CopyOnWriteArrayList<String>();     static { 
                 list.add("Jack");         list.add("Amy");         list.add("Lucy");     } 

1.6—ArrayList和LinkedList 的区别?

  • ArrayList

    • 基于动态数组的数据结构
    • 随机访问get和set,其效率优于LinkedList
    • 随机操作add和remove,ArrayList不一定比LinkedList慢(ArrayList底层不是每次都是动态数组add和remove都需要创建新数组)
  • LinkedList

    • 基于链表的数据结构
    • 顺序操作,LinkedList 不一定比ArrayList慢
    • 对于随机操作,LinkedList 效率明显低于LinkedList
锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章