23年毕业半年被裁后,一个月斩获大厂offer,“跟着周哥走,offer手里有”。文末有周哥50+场面试总结出的必会面试题。
ArrayList是List的接口实现类之一。
底层数据结构
ArrayList 的底层数据结构是一个动态数组。当向 ArrayList 中添加元素时,如果当前数组已满,它会自动扩容(默认扩容为原来容量的 1.5 倍)以容纳新的元素。
优缺点
优点
- 随机访问元素速度快。通过索引可以快速获取指定位置的元素,时间复杂度为 O(1)。
- 遍历方便。可以使用 for 循环、foreach 循环等方式进行遍历。
缺点
- 插入和删除元素效率较低。在中间位置插入或删除元素时,需要移动大量元素,时间复杂度为 O(n)。
常见方法
- add(E element):在列表末尾添加指定元素。
- add(int index, E element):在指定索引位置插入元素。
- get(int index):返回指定索引位置的元素。
- remove(int index):删除指定索引位置的元素。
- remove(Object o):删除指定元素。
size():返回列表中元素的个数。
应用场景
- 当需要频繁地随机访问元素,而较少进行插入和删除操作时,ArrayList 是一个很好的选择。
- 例如存储一系列固定不变或较少变动的数据,如学生名单、商品列表等。
大厂面试题
1. ArrayList 和 LinkedList 的区别是什么?
答:
- ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。
- 对于随机访问get和set,ArrayList优于LinkedList,因为LinkedList要移动指针。
- 对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数组元素。
简言之,数组寻址容易,插入删除困难;链表,寻址困难,插入删除容易。
2. ArrayList和Vector的区别(不同点)?
答:
- Vector是线程安全的,ArrayList不是线程安全的。
- ArrayList在底层数组不够用是在原来的基础上扩展0.5倍,Vector是扩展1倍,ArrayList更节省内存空间。
- 相较于ArrayList,Vector在方法前面都加了Sychronized关键字,来保证线程安全性。
说明:当执行synchronized修饰的方法前,系统会对该方法加一把锁,方法执行完成后释放锁,加锁和释放锁的这个过程,在系统中是有开销的,因此,在单线程的环境中,Vector效率要差很多。(多线程环境不允许用ArrayList,需要做处理)。
以上内容出自本人整理的面试秘籍。
链接: https://pan.baidu.com/s/1o014Ems8diV0D3h8K15olA?pwd=fi3x 提取码: fi3x 复制这段内容后打开百度网盘手机App,操作更方便哦
工作日每天更新,周末随缘更新。
请关注我,以便及时获取最新内容哦!
本文由mdnice多平台发布
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。