几种常用容器的分析与比较

1、List、Vector、deque与ArrayList、LinkedList       

stl提供了三个最基本的容器:vector,list,deque   
    
vector和built-in数组类似,即底层是数组数据结构,线程同步,然而现今被ArrayList代替了,已经很少用了。它拥有一段连续的内存空间,并且起始地址不变,因此它能非常好的支持随即存取,即[]操作符,但由于它的内存空间是连续的,所以在中间进行插入和删除会造成内存块的拷贝,另外,当该数组后的内存空间不够时,需要重新申请一块足够大的内存并进行内存的拷贝。这些都大大影响了vector的效率。对于简单的小对象,vector的效率优于list。vector在每次扩张容量的时候,将容量扩展2倍,这样对于小对象来说,效率是很高的。     

List在数据结构中表现为是线性表的方式,List集合中的对象按照一定的顺序排放,里面的内容可以重复,因为该集合体系有索引,List<E>集合继承于Collection<E>,是一个接口,List接口实现的类:ArrayList(实现动态数组), Vector(实现动态数组) ,LinkedList(实现链表), Stack(实现堆栈)。

deque是一个double-ended   queue,它的具体实现不太清楚,但知道它具有以下两个特点:

它支持[]操作符,也就是支持随即存取,并且和vector的效率相差无几。

它支持在两端的操作:push_back,push_front,pop_back,pop_front等,并且在两端操作上与list的效率也差不多。 

 综上所述:
 vector适用:对象数量变化少,简单对象,随机访问元素频繁
 list适用:对象数量变化大,对象复杂,插入和删除频繁
 最大的区别是,list是双向的,而vector是单向的。

 因此在实际使用时,如何选择这三个容器中哪一个,应根据你的需要而定,一般应遵循下面的原则:   
 1、如果你需要高效的随即存取,而不在乎插入和删除的效率,使用vector   
 2、如果你需要大量的插入和删除,而不关心随即存取,则应使用list   
 3、如果你需要随即存取,而且关心两端数据的插入和删除,则应使用deque。 

ArrayList 底层采用的是数组形式来保存对象的。特点: 查询速度很快,但是增删稍慢,线程不同步。

采用数组这种方式将对象放在连续的位置中,当向集合中添加对象时,数组的大小也随着改变,这样它所带来的有优点是快速的随机访问,即使访问每个元素所带来的性能问题也是很小的,但缺点就是想其中添加或删除对象速度慢,当你创建的数组是不确定其容量,所以当我们改变这个数组时就必须在内存中做很多的处理,如你想要数组中任意两个元素中间添加对象,那么在内存中数组要移动所有后面的对象。

LinkedList底层使用的是链表数据结构。特点: 增删速度很快,查询稍慢。

它是通过节点的连接实现链表的数据结构&#

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值