Java集合框架里ArrayList Vector和LinkedList的区别

一、Vector和ArrayList
相同点:
Vector和ArrayList都是基于储存元素的Object[] array来实现的,是根据索引来访问元素。

不同点:
1)同步性
   Vector的方法大部分是同步的,是线程安全的
   而ArrayList的方法不是同步的。
   由于线程的同步必然要影响性能,Vector开销就比较大,这样就造成ArrayList比Vector更快些,不过在最新的JVM中,这两个类的速度差别是很小的,几乎可以忽略不计。正常情况下,大多数的Java程序员使用ArrayList而不是Vector,因为同步完全可以由程序员自己来控制。

2)数据增长:
   当集合中的元素超过它的初始大小时, Vector会将它的容量翻倍,而ArrayList只增加50%的大小;
   ArrayList就有利于节约内存空间。

补充: Hashtable & HashMap
Hashtable和HashMap它们的性能方面的比较类似 Vector和ArrayList,比如Hashtable的方法是同步的,而HashMap的不是。
备注:对于Vector&ArrayList、Hashtable&HashMap,要记住线程安全的问题,记住Vector与Hashtable是旧的,是java一诞生就提供了的,它们是线程安全的,ArrayList与HashMap是java2时才提供的,它们是线程不安全的。
二、ArrayList和LinkedList区别:
1.ArrayList是实现了基于 动态数组的数据结构;
  LinkedList基于 双向循环链表的数据结构。
2.ArrayList的所有数据是在同一个地址上,而LinkedList的每个数据都拥有自己的地址.

3.数据插入 :比如在i节点插入一个新数据
   ArrayList:循环到i节点,插入一个新数据,然后把i节点后面的所有的数据的index加1. ->操作多
   LinkedList:循环到i节点,把前一个节点的后续链接到新数据,然后把新数据链接到后一个数据就可以了.  ->操作少
   结论:平均效率LinkedList要好.
   !!这一点要看实际情况的。若只对单条数据插入或删除,ArrayList的速度反而优于LinkedList。但若是批量随机的插入删除数据,LinkedList的速度大大优于ArrayList. 因为ArrayList每插入一条数据,要移动插入点及之后的所有数据。

4.数据删除 :比如删除i节点数据
   ArrayList:循环到i节点,然后把i节点后面的所有的数据的index减1. ->操作多
   LinkedList:循环到i节点,把前一个节点的后续链接到i节点的后一个数据就可以了.  ->操作少
   结论:平均效率LinkedList要好.

5.数据查询 :比如查询i节点数据
   ArrayList:循环到i节点. ->操作少
   LinkedList:循环到i节点.  ->操作少,但由于每个数据的地址不一样,查询比如 ArrayList慢.
   结论:平均效率 ArrayList要好.

6.数据更新 :比如更新i节点数据
   ArrayList:循环到i节点,把数据更新. ->操作少
   LinkedList:循环到i节点,把前数据更新.  ->操作少,但由于查询速度没有 ArrayList好,所有效率没有 ArrayList好.
   结论:平均效率ArrayList要好.

7.查找操作indexOf,lastIndexOf,contains等,两者差不多。
8.随机查找指定节点的操作get,ArrayList速度要快于LinkedList.
  这里只是理论上分析,事实上也不一定,ArrayList在末尾插入和删除数据的话,速度反而比LinkedList要快。
9、LinkedList更适用于:没有大规模的随机读取;大量的增加/删除操作


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值