List 集合下常见面试题

集合类:

linkedlist 和 arrayList 区别

linkedList 是基于链表,所以增加和删除数据要更快,arrayList 是基于动态数组,所以随机查找的效率更高,linkedList 和 arrayList 都实现了 List 接口,不同的是,LinkedList 多实现了 deque 的接口,所以有类似 addLast,removeLast 的方法,可以当做双端队列来使用

arraylist 的扩容问题:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上

默认的容量是 10,如果构造的时候声明容量大小,会设置为声明的大小。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gU8eFIw1-1640581752842)(C:\Users\62459\AppData\Roaming\Typora\typora-user-images\image-20211227114817928.png)]

在这里插入图片描述

扩容时,会调用 grow 方法,每次扩容的大小为当前大小的 1.5 倍。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4sl4ABJu-1640581752843)(C:\Users\62459\AppData\Roaming\Typora\typora-user-images\image-20211227115102537.png)]

使用 add 插入数据的时候,首先判断是否容器已满,如果已经满,会先扩容再添加,插入指定位置的时候,也会先判断该位置是否合法。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BuSUSRLQ-1640581752844)(C:\Users\62459\AppData\Roaming\Typora\typora-user-images\image-20211227115437317.png)]

arraylist 和 vector 区别:

相同点:

都实现了 list 接口,都是有序集合,相当于一种动态的数组,可以按照位置索引号取出元素,集合内数据是可以重复的,默认的大小都是 10.

不同点:

vector 是线程安全的,方法是线程同步的使用 synchronize 修饰的,而 arraylist 是线程不安全的,方法之间线程不同步,如果只有一个线程访问集合,最好使用 arraylist,因为不考虑线程安全问题,效率会高,但是如果有多个线程访问,就最好使用 vector,就不需要手动考虑和编写线程安全的代码了。arrylist 的扩容每次增加 1.5 倍,但是 vector 在不指名增加量的情况下,是增加 2 倍。vector 可以设置增长空间的大小,但是 arraylist 不能设置。

线程安全的 list 集合

vector,synchronizedList,CopyOnWriteArrayList,CopyOnWriteArraySet,hashTable,CourrentHashMap

数组 Array 和 列表 ArrayList 的区别,什么时候使用

Array 可以包含基本类型和对象,但是 Arraylist 只能包含对象

Array 大小是固定的,Arraylist 的大小是动态变化的,可以扩容

如果元素大小是固定的,而且能事先知道,我们就应该使用 Array 而不是 Arraylist。

集合框架的基本接口有哪些:

List:有顺序的 collection,并且可以包含重复元素

Map:可以把 key 映射到 value 的独享,键值不能重复,但可以为空

Collection:代表一组对象,每一个对象都是它的子元素

Set:不包含重复元素的 Collection。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_努力努力再努力_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值