Java集合面试高频问题---集合框架体系(1)🐔

xiaolifc / 2024-03-12 / 原文

Java集合--arraylist 与 linkedlist

1. 集合框架体系

2. list相关面试题

2.1 数组

数组中的下标如何找到对应的值?对应一个寻址公式

**例如 **
**代入公式 array[1]=10+14=14 array[2]=10+24==18 int类型四个字节 **

为什么数组下标从0开始?从1开始不行吗?

两点:
1. 寻址公式回答出来 数组首地址+下标*元素类型占字节的大小
2. cpu会多一次运算,在(大数据量计算中)上亿或者百亿次计算中会多耗费时间

2.2 ArrayList

初始化,如果初始化没有传参数,默认先讲空的list赋值给它,有值,则按照指定大小创建

第1次添加数据,此时数组的大小是0,首次需要扩容(默认为10)

第2-10次添加数据,不会扩容

第11次添加数据,此时容量不够,需要扩容,每次扩容原始容量的1.5倍 oldCapacity>>1 等价于 oldCapacity/2

arraylist实现的底层原理是什么? 回答出以下几点

此处扩容了几次? 没有扩容

数组和list之间的相互转换

转换之后,更改之前的数据,它们会受影响吗?

数组转换为 list,调用Arrays.asList()方法,它们指向同一个地址,改变了都 会受影响
list 转换为数组,调用 list.toArray()方法,需要传入原来的 list 内的类型,内部调用了 copy 方法,是一个新的数组,不受影响。

2.3 链表

单向链表

双向链表

链表总结

必问面试题:linkedlist 和 arraylist 的区别是什么?

从四个方面来回答:


总结