1.首先我们从它们底层数据结构来分析

          (1)Arraylist 和 Vector都是基于数组实现的,你可以从它的单词结构构成都可以看出,但是这个两个还是有一点点区别的

                  Arraylist的实现原理是采用一个动态对象数组实现的,默认构造方法创建一个空数组

           Arraylist 和 Vector 和Linkedlist的区别

            Arraylist 和 Vector 和Linkedlist的区别

         Vector的实现原理也是采用一个动态对象数组实现的,只不过它的默认构造方法创建一个大小为10的对象数组

          Arraylist 和 Vector 和Linkedlist的区别

       Arraylist 和 Vector 和Linkedlist的区别

      Arraylist 和 Vector 和Linkedlist的区别

     Arraylist 和 Vector 和Linkedlist的区别

    (2) Arraylist第一次添加元素时候,扩展容量为10,之后的扩充算法:原来数组大小+原来数组的一半(也就是1.5倍)

      Arraylist 和 Vector 和Linkedlist的区别

      Arraylist 和 Vector 和Linkedlist的区别

     Arraylist 和 Vector 和Linkedlist的区别

     Arraylist 和 Vector 和Linkedlist的区别

    Arraylist 和 Vector 和Linkedlist的区别 

应该可以很清楚的知道ArrayList底层扩容的原理了。而Vector和Arraylist的扩容机制类似,与Vector不同的是,Vector分两种情况如果增量为0的情况下每次扩容容量是翻倍,即为原来的2倍,而当增量>0的时候,扩充为原来的大小加增量,而ArrayList是1.5倍。看似1.5倍增长的很慢,那经常增加大量元素会不会导致经常扩容,数组重新分配导致效率低下呢?其实不然,每次增长为原来的1.5倍实际增长的量会越来越大的
   (3)所以Arraylist和Vector不适合进行删除或插入操作

    (4)为了防止数组动态扩充过多,建议创建ArrayList或者Vector时,给定初始容量。

    (5)Arraylist多线程中使用不安全,适合在单线程访问时使用,效率较高,而Vector线程安全,适合在多线程访问时使用,效率较低

 

相关文章:

  • 2021-10-09
  • 2021-08-11
  • 2021-08-23
  • 2022-01-01
  • 2021-06-10
  • 2021-07-01
  • 2021-07-30
猜你喜欢
  • 2021-06-13
  • 2021-10-22
  • 2022-02-06
  • 2022-12-23
  • 2021-11-27
  • 2022-12-23
  • 2021-07-05
相关资源
相似解决方案