java中几个重要的集合

1>Arraylist底层实现原理

      a:底层是基于动态数组实现,采用顺序存储结构,基于顺序的存储结构,内存空间是连续的,支持高效的随机访问数据,查询数据的时间复杂的为O(1),插入数据的时间复杂的为O(n),

     b:默认创建的长度为10,在进行扩容的时,会创建一个是之前数组容量的1.5倍的数组,会将原始的数组中的数据拷贝到新的的数组当中

  c:Arrayllist的add方法,在每次添加元素的时候都会进行一个判断,判断该数组是否需要扩容,在指定的index中插入数据的时候,需要判断该index是否越界

    线程不安全的理由,在多线程访问Arraylist,如果其中的一个线程,对该数组的结构进行了修改此实现实现的不同步的,其他线程继续访问该数组抛出异常.

   线程不同步的的一个重要原因,是Arraylist方法中,都,没有被synchronized同步方法修饰

2>Likedlist的底层实现原理

     a:底层的数据结构使用的是双向链表,对linkedlist的操作实际上就是对双向链表的操作

     b:Linkedlist中的每一个元素都对应双向链表的的一个节点,包括3个部分,一个是对前节点的引用,一个是数据本身,一个是对后节点的引用

   c:基于双向链表的顺序访问数据,效率较高,随机访问效率低下

  d:在增加,和删除的操作中,时间复杂度为O(1),只需要改变指针的指向即可

  e:支持的遍历操作,通过iterator迭代效率高,通过随机访问get()访问效率低

3>Vector的底层实现原理:

       该底层和Arraylist的底层实现一样,只是Vector是线程安全的,方法都被synchronized同步,扩容后是原来的2倍

   总结:以上3中集合的区别:

      1>vector和Arraylist底层都采用的是数据这种数据结构,是顺序存储,存储空间连续,Linkedlis底层是链表这种数据结构

     2>线程安全:vector线程安全,Arraylist和Linkedlist线程不安全

     3>基于效率问题,基于数组顺序存储结构,随机访问数据效率高,基于链表这种数据结构,增加删除效率高,但是基于链表这种数据结构需要更多的内存空间,才赢空间换时间的思想  

    4>就扩容而言,Arrylist是之前的1.5倍,Vector是原来的2倍

   

猜你喜欢

转载自blog.csdn.net/w5201314ws6123/article/details/87907992