ArrayList常见面试题

参考b站,整理arraylist常见面试题 


前言

  牛马大学生对java常见面试题ArrayList进行日常记录,简单的理解总结,供大家进行参考


一、ArrayList的底层实现原理

   ArrayList的底层使用的是动态数组,初始化容量为0,第一次添加数据的时候初始化容量为10,每次扩容为1.5倍扩容,扩容需要拷贝原来数组

  添加数据,需要保证数组的长度size+1可以存下一个数据,如果当前已用size+1大于数组的长度,则使用grow方法进行扩容,将元素添加到size位置,返回成功的布尔值

二、ArrayList list = new ArrayLsit(10)扩容了几次?

  扩容了0次,他只是声明了一个容量为10的数组

三、数组和集合List之间如何转换?

数组转List集合:Arrays中的方法asList

List集合转数组:toArray方法,参数是初始化长度的数组对象

四、Arrays.asList转为集合后,修改原数组,集合的值改不改变?

改变

五、toArray后,修改原集合,数组改不改变?

不改变

六、ArrayList和LinkedList的区别

1.底层结构

ArrayList底层使用的是动态数组,LinkedList底层使用的是双链表

2.查找效率

查找指定下标:ArrayList的时间复杂度是O(1),LinkedList不支持下表查找

查找随机下标:都需要进行遍历,都是O(n)

新增和删除:ArrayList的尾部增删时间复杂度是O(1),其他是O(n)

                      LinkedList头尾增删时间复杂度是O(1),其他是O(n)

3.内存

ArrayList内存连续,占用内存少

LinkedList内存不连续,链表存储前后节点的引用,内存消耗大

4.线程安全

  他们的线程都不安全,如果想要他们的线程安全,可以使用为局部变量,在局部方法内使用,或者使用collection的synchronizedlist方法进行包装


总结

    最基本的常见关于Arraylist的面试题,最简单的语言进行总结

  • 7
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
arraylist面试题有很多,以下是一些常见的问题和回答: 1. Java 中集合框架的主要接口是什么? ArrayList 和 LinkedList 有什么区别? Java 中集合框架的主要接口是 Collection 接口。ArrayList 和 LinkedList 都实现了 List 接口,但它们的底层实现方式不同。ArrayList 是基于动态数组实现的,它可以快速访问任意索引的元素,但在插入和删除操作时效率较低。LinkedList 是基于双向链表实现的,它在插入和删除操作时效率较高,但在访问具体索引的元素时效率较低。 2. HashSet 和 TreeSet 有什么区别? HashSet 和 TreeSet 都是 Set 接口的实现类,它们都可以用来存储不重复的元素。HashSet 是基于哈希表实现的,它不保证元素的顺序,但是查找元素的速度很快。TreeSet 是基于红黑树实现的,它可以对元素进行排序,并且支持有序操作。 3. HashMap 和 TreeMap 有什么区别? HashMap 和 TreeMap 都是 Map 接口的实现类,它们都可以用来存储键值对。HashMap 是基于哈希表实现的,它不保证键值对的顺序,但是查找键值对的速度很快。TreeMap 是基于红黑树实现的,它可以对键进行排序,并且支持有序操作。 4. 什么是迭代器?如何使用它来遍历集合? 迭代器是用来遍历集合中元素的对象。可以通过调用集合的 iterator() 方法来获取迭代器对象。然后可以使用 hasNext() 方法检查是否还有下一个元素,使用 next() 方法获取下一个元素。可以使用迭代器的 remove() 方法来删除当前元素。 5. 当开启多个线程操作 List 集合,向 ArrayList 中增加元素,同时去除元素。最后输出 List 中的所有数据,会出现几种情况? 在多线程环境下,向 ArrayList 中增加和删除元素是不安全的。可能会出现并发修改异常 ConcurrentModificationException。如果要在多线程环境下安全地操作 List 集合,可以使用 Collections.synchronizedList 方法将 ArrayList 包装成线程安全的容器。 以上是一些常见ArrayList 面试题和回答,希望能对你有帮助。<span class="em">1</span><span class="em">2</span><span class="em">3</span><span class="em">4</span>

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

载着梦想的猪

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

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

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

打赏作者

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

抵扣说明:

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

余额充值