list && iterator

来源:互联网 发布:民航大数据发展状况 编辑:程序博客网 时间:2024/05/17 22:08

在List实现类中有3个主要的实现类:ArrayList ,Vector(向量,可变数组),LinkedList.其中Vector有一个Stack(栈)子类,这个子类仅仅在父类的基础上增加了5个子类,这五个方法就降一个向量扩展成了栈。本质上Stack就是一个Vector只是多了5个方法而已。

新增的5个方法有3个使用了synchronized修饰,这也就是说Stack是一个线程安全的类,这也是为了Stack和Vector保持一致,Vector也是一个线程安全的类。

主要区别

  • Deque接口代表双端队列这种数据结构,既有队列的性质:FIFO也有了栈的性质:FILO.
  • transient:java语言的关键字,变量修饰符,如果用transient声明一个实例变量,当对象存储时,它的值不需要维持。ArrayList使用了transient关键字。这就保证了系统序列化ArrayList对象的时候不会直接序列化。而是通过方法来序列号对象。从序列化角度来说ArrayList比Vector实现更加安全。
  • Vector是ArrayList的线程安全版本。只是说vector的方法增加了synchronized修饰。
  • Vector唯一的好处就是它的线程安全性。

如果用List集合而去避免使用Vector,而是考虑使用ArrayList。可以通过Collections.synchronizedList的方法可将一个普通ArrayList包装成一个线程安全的ArrayList

List是一种线性表,ArrayList是一种顺序存储的,而LinkedList是链式的。但是它不仅实现了List接口 也实现了Deque接口。也就是说LinkedList可以当成一个队列 双向链表 栈 都可以使用。

  • ArrayList:保证底层封装的数组大小大于集合元素的数目,插入位置之后所有的元素都要移动,一旦删中间的一个元素就要把整体搬家。所以对于ArrayList来说,读取性能最好(几乎跟数组一样),但是插入和删除就不是很好了。而且有些浪费申请了一个数组空间。
  • LinkedList:这个相当于是个双向链表,所以使用这个来插入和删除的效率极高。但是这个要搜索就麻烦了 必须一个个的搜索,直到找到那个元素为止。单单的只添加一个节点的性能特别好,但是要在指定索引处添加 就需要先找到再添加。但是这个搜索过程的系统开销并不小。
    这两个List的总结:
  • ArrayList的性能优于LinkedList。绝大部分ArrayList的性能比较高,如果经常性的添加和删除元素 尤其是经常使用add(E e) 的方法向集合中添加元素才会考虑使用LinkedList。
0 0
原创粉丝点击