ArrayList和LinkedList和vetor区别?

1、ArrayList和Vetor底层是采用数组来存储数据的,而且都是根据索引来获取数据,这样的设计使得获取数据快而插入数据慢; 另外在每一次扩容的时候,都要移动数组中的元素,当存储数据量较大的时候,会影响读写性能。其次由于vector中的方法使用了synchronized修饰,因此vector中对数组的操作都是线程安全的,但是性能上比ArrayList要差一些。

Linkedlist底层是使用双向链表来存储数据的,也就是说将内存中比较零散的单元通过一个附加的引用关联起来,然后形成一个可以按序号索引的线性结构,这种链式的存储结构和数组的连续存储方式相比,他的内存利用率更高一些,Linkedlist获取数据的时候需要根据索引的序号向前或者向后来遍历,但是插入数据的时候,只需要记录本项的前后项就可以,所以Linkedlist插入数据更快一些。

Vetor是java早期的版本中提供的容器,所以它是属于一个遗留容器,官方已经不在推荐使用了,但是由于ArrayList和linkedlist都是非线程安全的,在多线程环境下,我们可以使用工具类collections的一个synchronizedList()方法来将容器转换成线程安全的容器再来使用这其实也是利用了装饰器模式的一种应用。

2、java中的遗留容器,出了vector之外还有hashtable,dictionary,bitset,stack和properties。

他们中properties类存在比较严重的设计缺陷:看源码

Public class Properties extends Hashtable<Object,Object> {。。。}

Properties 都是字符串的特殊键值对映射,在设计上关联一个hashtable,并且将它的两个泛型参数设计为string类型,但是在java api中Properties 是直接继承了hashtable的这很明显是对继承的泛滥,主要提现在两方面,

  1. 根据合成复用原则:这里的Properties 和hashtable的代码复用关系应该是has-a的关系,而不是is-a的关系,
  2. 这两个容器都是属于工具类,继承工具类本身就是一种错误的做法,所以使用工具类最好的做法方式应该是has-a的关联关系,或者是use-a的关系依赖关系。

拓展一下,stack类在设计上也·存在同样的一个缺陷,源代码jdk的util包中,stack类也继承了vector,这个设计也不太合理

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值