Arraylist 和 Vector 和Linkedlist的区别

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

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

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

           

            

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

          

       

      

     

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

      

      

     

     

     

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

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

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

猜你喜欢

转载自www.cnblogs.com/kyrieblog/p/11128882.html