A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© vipzh 中级黑马   /  2012-12-5 10:27  /  1109 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

vector和list这两个我们应该怎么样去选择使用?

2 个回复

倒序浏览
1.ArrayList是最常用的List实现类,内部是通过数组实现的,它允许对元素进行快速随机访问。数组的缺点是每个元素之间不能有间隔,当数组大小不满足时需要增加存储能力,就要讲已经有数组的数据复制到新的存储空间中。当从ArrayList的中间位置插入或者删除元素时,需要对数组进行复制、移动、代价比较高。因此,它适合随机查找和遍历,不适合插入和删除。
2.Vector与ArrayList一样,也是通过数组实现的,不同的是它支持线程的同步,即某一时刻只有一个线程能够写Vector,避免多线程同时写而引起的不一致性,但实现同步需要很高的花费,因此,访问它比访问ArrayList慢。
3.LinkedList是用链表结构存储数据的,很适合数据的动态插入和删除,随机访问和遍历速度比较慢。另外,他还提供了List接口中没有定义的方法,专门用于操作表头和表尾元素,可以当作堆栈、队列和双向队列使用。
一般情况下都选用list
回复 使用道具 举报
从Java的初始版本开始,Vector和HashTable类就提供了线程安全的动态数组和散列表的实现,从JavaSE 1.2开始这些类被弃用了,取而代之的是ArrayList和HashMap类,这些类别不是线程安全的,而集合库中提供了不同的机制,任何集合类都可以通过使用同步包装器(synchronization wrapper)变成线程安全的:
List<E> synchArrayList=Collections.synchronizedList(new ArrayList<E>());
Map<K,V> synchHashMap=Collections.synchronizedMap(new HashMap<K,V>());
结果集合的方法使用锁加以保护,提供了线程的安全访问。
现阶段还是推荐使用List集合,如果需要保证数据的原子性,一般不再使用同步包装器中的了,而是使用java.util.concurrent包中定义的集合,例如ConcurrentHashMap已经精心实现了,多线程可以访问它而且不会彼此堵塞。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马