几个集合特点及使用小结

Vector和ArrayList的区别

(1)使用上:与ArrayList没有区别
(2)源码上

  • 底层数据结构:完全相同
  • 构造函数:ArrayList初始数组为空,添加第一个元素容量变为10;
    Vector初始数组大小为10。 初始化时机不同
  • grow方法:ArrayList是0-10,后面是呈1.5倍扩容
    Vector是 如果capacityIncrement不大于0的话Vector2倍扩容,如果capacityIncrement大于0,Vector容量扩大capacityIncrement个那么大
    默认情况下Vector是2倍扩容,capacityIncrement实际上就是增长因子。
  • 为什么扩容方法Vector更合理:
    Vector中所有方法都添加了synchronized锁,所以Vector是线程安全的集合。避免了空间浪费。Arraylist中没有加锁处理,所以是线程不安全的集合 扩容方式不同

(3)使用场景:线程安全问题
多线程条件下需要考虑线程安全问题选择Vector;如果不需要则考虑使用ArrayList。

  • 为什么不用考虑线程安全时不使用Vector:
    加锁操作是非常耗时的,为了提高效率。Vector中所有方法都添加了synchronized锁,所以Vector是线程安全的集合。避免了空间浪费。Arraylist中没有加锁处理,所以是线程不安全的集合 。

栈 Stack:利用Vector实现了一个线程安全的栈。
先入后出:先添加的元素在删除时先删除

常见面试题回答技巧总结:

(从以下几个方面进行回答)
1.继承关系:集合继承了那些父类,哪些接口
2.底层结构;
3.源码实现:

  • 初始容量
  • 初始化时机
  • 扩容方式
  • 遍历方式:都可使用迭代器遍历,(listIterator:是list集合特有的迭代器)
  • 数据值可否为空
  • 数据可否有序:插入顺序 数据的自然顺序
  • 数据是否可以重复
    4.线程是否安全;
    5.使用场景。

常见问题

(1)LinkedList和ArrayList的区别
都属于list继承下的集合;
a.底层数据结构:数组 双向链表;
LinkList没有容量和扩容之说,都可使用迭代器遍历,都许为空,都可重复
都不是线程安全的集合;
b.使用场景 :LinkList更适合随机添加删除方法频繁的操作,因为不牵扯数据移动;ArrayList随机的添加删除操作会造成数据移动,导致效率过低;ArrayList:适合于随机访问操作比较频繁 。注意:是随机!
(2)ArrayList和Vector的区别:
(从源码实现:初始化时机 、 扩容方式 、 线程是否安全, 这几个方面回答)
构造函数:ArrayList初始数组为空,添加第一个元素容量变为10;
Vector初始数组大小为10。 初始化时机不同
grow方法:ArrayList是0-10,后面是呈1.5倍扩容
Vector是 如果capacityIncrement不大于0的话Vector2倍扩容,如果capacityIncrement大于0,Vector容量扩大capacityIncrement个那么大
默认情况下Vector是2倍扩容,capacityIncrement实际上就是增长因子
扩容方法Vector更合理:Vector中所有方法都添加了synchronized锁,所以Vector是线程安全的集合。避免了空间浪费。Arraylist中没有加锁处理,所以是线程不安全的集合 扩容方式不同
使用场景:线程安全问题
多线程条件下需要考虑线程安全问题选择Vector,如果不需要则考虑使用ArrayList,
为什么不用考虑线程安全时不使用Vector
加锁操作是非常耗时的,为了提高效率。

(3)什么时候该用Vector,什么时候该用ArrayList?
使用场景:线程安全问题
多线程条件下需要考虑线程安全问题选择Vector,如果不需要则考虑使用ArrayList。
(4)什么时候该用LinkedList,什么时候该用ArrayList
LinkList更适合随机添加删除方法频繁的操作,因为不牵扯数据移动;ArrayList随机的添加删除操作会造成数据移动,导致效率过低;ArrayList:适合于随机访问操作比较频繁 。注意:是随机!

数组和集合的区别

(1)数组是静态,集合是动态
(2)集合功能更全面(下标是否越界 功能之一)
(3)数组需要指定类型Integer[ ]arr,存储数据必须是这个类型。
集合创建时不需要(可有可无)如果有存储数据必须是这个类型,如果没有存储数据可以是任意的。注意:集合指定存储数据类型方式用的较多,原因是更好管理。
(4)数组在指定类型时既可以使用普通类型,也可以使用引用类型,集合只能使用引用类型。Integer[ ]arr,int brr
(5)数组Java内置类型数组效率更高
什么时候用集合,什么时候用数组?
对元素的数量有明确判断并且轻易不会发生改变时,存储好的数据不会有复杂的后续操作时用数组,集合与之相反。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值