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多平台发布


周哥的offer秘籍
1 声望0 粉丝

23年硕士毕业半年被裁,一个月斩获大厂offer。面试经历50+,擅长校招社招求职笔试和面试全流程,擅长简历撰写。跟着周哥走,offer手里有!关注周哥不迷路!