List集合

来源:互联网 发布:php windows 编译 编辑:程序博客网 时间:2024/06/06 00:46

1,ArrayList

       

       ArrayList实现了RandomAccess接口,即提供了随机访问功能,RandomAccess是用来被List实现,为List提供快速访问功能的,在ArrayList中我们可以通过序号快速访问ArrayList。

   ArrayList实现Cloneable接口,即覆盖了函数clone(),能被克隆。

   ArrayList实现Serializable接口,支持序列化传输。

   和Vector不同,ArrayList中的操作不是线程安全的所以,建议在单线程中才使用ArrayList,而在多线程中可以选择Vector或者CopyOnWriteArrayList

   2,LinkedList

        


   3,Skip List跳跃表

    是一种可以代替平衡树的数据结构,默认是按照key值升序的排列元素,Skip List让已经排序的元素分布在多重链表中,在每个节点上增加向前的指针,在插入,删除,查找时可以忽略一些元素,提高操作效率。

   ConcurrentSkipListMap内部由Skip List构成的,是线程安全的实现,调用concurrentSkipListMap的size()方法时,由于多线程可以同时对映射表进行操作,所以映射表要遍历整个链表才能返回元素个数。

     ConcurrentSkipListSet是由ConcurrentSkipListMap实现的,ConcurrentSkipListMap存储的元素以key-value形式存储,而ConcurrentSkipListSet中存储的是ConcurrentSkipListMap中key-value中的key

    

4,如何扩展List讨论及List实现类的区别

     ArrayList和LinkedList各有优缺点,都有各自所适应的地方,总的来说可以描述如下:

      1,对ArrayList和LinkedList而言,在列表末尾添加一个元素花销都是相同的,ArrayList主要是在内部数组中增加一项,指向所添加的元素,偶尔可能会导致对数组进行重新分配。对LinkedList而言,这个开销是统一的,分配一个内部Entery(节点)对象。

    2,在ArrayList中间插入或删除一个元素,意味着这个列表中剩余的元素都会被移动,而linkedList中间插入或删除一个元素的开销大小固定。

   3,LinkedList不支持高效的随机元素访问。

   4,ArrayList的空间浪费主要体现在list列表的结尾预留了一些没使用完的空间,LinkedList空间花费表现在每个元素都有存储指针的空间。

  ArrayList和Vector的却别:

  这两个类都实现了List接口,他们都是有序集合,存储在这连个集合上的元素都是顺序排列的,相当于一种动态数组,可以按位置索引获取每一个元素,并且其中的元素允许重复。

 1,同步性,Vector是线程安全的,也就是说它的方法之间是线程同步的,而ArrayList是线程不安全的,如果只有一个线程访问到集合,最好用ArrayList因为它是线程不安全的,效率高。基于多线程的操作,用Vector,这样就不用对线程同步问题进行处理。

2,数据增长,ArrayList和Vector都有一个初始的容量大小,当存储在他们里的元素超过了容量时,就需要增加Vector和ArrayList容量大小,每次增加存储空间时不是增加一个

存储单元,而是增加多个存储单元。每次增加的存储单元的个数在内存空间利用和程序效率之间要取得平衡。Vector默认为增加为原来的2倍,ArrayList默认为1.5倍。ArrayList和Vector都可以指定初始大小。Vector可以设置增加的空间的大小,ArrayList不可以设置增加的空间的大小。