面试准备

一.List与vector的区别

1.在c++中:

stl 提供了3个最基本的容器:vector, list, deque.

vector: 与数组类似,有一段连续的存储空间,非常好的支持随即存取。但插入和删除操作会造成内存块拷贝。当内存空间不够时需要申请一块足够大的内存并拷贝。

list: 与双向链表类似,内存空间不连续,通过指针进行访问。随即访问没效率,插入和删除有效率。

deque:支持随即存取,效率与vector差不多。支持在两端 push_back, push_front, pop_back, pop_front,效率和list差不多。

2.在java中:

Collection[I]

+--java.util.Set[I]

+--java.util.List[I]

       +--java.util.ArrayList[C]

       +--java.util.LinkedList[C]

       +--java.util.Vector[C]

               +java.util.Stack[C]

所有实现Collection接口的类都必须提供两个标准的构造函数:无参数的构造函数用于创建一个空的Collection,有一个Collection参数的构造函数用于创建一个新的Collection,这个新的Collection与传入的Collection有相同的元素。后一个构造函数允许用户复制一个Collection。

List: 是有序的Collection。与Set不同的是,List允许有相同的元素。除了具有Collectiong接口必备的iterator()外,List还提供listIterator()方法,返回一个ListIterator接口,和标准的接口相比,多了添加,删除,向前向后遍历等。

ArrayList: 内部通过数组实现,实现了基于动态数组的数据结构,允许随即访问get和set。当数组需要增长时,新的容量大概大概会增加50%,这就意味着一个包含大量元素的ArrayList对象,最终会有很大的空间被浪费掉。当数组大小不满足时需要增加存储能力,需要将已有数组的数据复制到新的存储空间中,这将导致性能急剧下降。Arraylist没有同步。

LinkList: 对于remove,insert,LinkList比较占优势,只需修改指针即可。LinkList中还有next和previous两个元素,这在一个LinkList结构中将有很大的空间开销。提供list接口没有定义的方法,get,remove,insert 操作表头和表尾。LinkList没有同步方法,可多线程同时访问一个List。

Vector: 与ArratList一样,通过数组实现,不同的是它支持线程同步。即某一时刻只有一个线程能够写Vector。但实现线程同步需要高花费,访问它比访问ArratList慢。

关于ArrayList和Vector区别如下:

  1. ArrayList在内存不够时默认是扩展50% + 1个,Vector是默认扩展1倍。
  2. Vector提供indexOf(obj, start)接口,ArrayList没有。
  3. Vector属于线程安全级别的,但是大多数情况下不使用Vector,因为线程安全需要更大的系统开销。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值