Java基础面试题(08)—Java(ArrayList)
·
前言
学习项目的过程中,我觉得自己有点太急功近利了一直跟着视频敲没有自己的思考(主要是最近在牛客读到了一位大佬👍👍👍,程序员牛肉的文章),🙌学技术不是一味的复制粘贴,特别是做项目,要边学边思考,一个功能的实现,我学会了什么技术,还有没有更好的可以替代它。
之前学的基础知识其实也没有学完,像集合,线程… 都还不知道是啥就开始学JavaWeb做项目了,在项目中使用队列存储我都一脸懵,在这里以问题的形式写一个学习笔记🤔,不仅仅是复习,也为以后的面试做准备,还有还有我的刷题网站是面试鸭呦🦆🦆🦆
🙌先介绍一下什么是ArrayList 集合
ArrayList 是 Java 集合框架(Java Collections Framework)中的一个核心类,位于 java.util 包中。它是一个可动态调整大小的数组实现,可以看作是数组的“加强版”。
核心特性:
- 基于数组实现: ArrayList 内部使用一个 Object[] 数组来存储元素。这是它与 LinkedList 的根本区别。
- 动态扩容: 这是 ArrayList 最大的优势。当你向 ArrayList 中添加元素时,如果内部数组的空间不足,它会自动创建一个更大的新数组,并将原数组中的所有元素复制过去。这个过程对程序员是透明的。
*有 序 (Ordered): ArrayList 维护元素的插入顺序。元素在列表中的位置由其索引(index)决定,索引从 0 开始。 - 允许重复和 null 值: ArrayList 可以存储重复的元素,也允许存储 null 值。
- 非线程安全: ArrayList 不是线程安全的。如果多个线程同时访问一个 ArrayList 实例,并且至少有一个线程修改了列表的结构(添加、删除元素),那么必须在外部进行同步,否则可能导致数据不一致。如果需要线程安全的变体,可以使用 Collections.synchronizedList(new ArrayList<…>()) 或 CopyOnWriteArrayList。
常用方法:
- 添加元素:
- add(E e): 将元素添加到列表末尾。
- add(int index, E element): 将元素插入到指定位置,该位置及之后的元素向后移动。
- 获取元素:
- get(int index): 返回指定索引位置的元素。
- 修改元素:
- set(int index, E element): 用指定元素替换列表中指定位置的元素。
- 删除元素:
- remove(int index): 删除指定索引位置的元素。
- remove(Object o): 删除列表中第一次出现的指定元素。
- 查询:
- size(): 返回列表中的元素数量。
- isEmpty(): 判断列表是否为空。
- contains(Object o): 判断列表是否包含指定元素。
- indexOf(Object o): 返回指定元素在列表中第一次出现的索引,如果不存在则返回 -1。
转换: - toArray(): 将 ArrayList 转换为数组。
时间复杂度:
- 随机访问 (按索引访问): 非常快 (O(1))。因为底层是数组,通过索引可以直接定位到元素。
- 在末尾添加/删除元素: 通常很快 (摊还 O(1))。虽然偶尔需要扩容(O(n)),但平均下来是高效的。
- 在中间或开头添加/删除元素: 较慢 (O(n))。因为需要移动插入点之后的所有元素。
- 查找元素 (按值): 较慢 (O(n))。需要遍历整个列表进行比较。
import java.util.ArrayList;
public class ArrayListExample {
public static void main(String[] args) {
// 创建一个可以存储字符串的 ArrayList
ArrayList<String> fruits = new ArrayList<>();
// 添加元素
fruits.add("Apple");
fruits.add("Banana");
fruits.add("Orange");
fruits.add(1, "Grape"); // 在索引1处插入 "Grape"
// 打印列表
System.out.println(fruits); // 输出: [Apple, Grape, Banana, Orange]
// 获取元素
String firstFruit = fruits.get(0);
System.out.println("第一个水果是: " + firstFruit); // 输出: Apple
// 修改元素
fruits.set(2, "Mango");
System.out.println(fruits); // 输出: [Apple, Grape, Mango, Orange]
// 删除元素
fruits.remove("Orange"); // 删除值为 "Orange" 的元素
System.out.println(fruits); // 输出: [Apple, Grape, Mango]
// 获取大小
System.out.println("水果种类数量: " + fruits.size()); // 输出: 3
}
}
小白啊!!!写的不好轻喷啊🤯如果觉得写的不好,点个赞吧🤪(批评是我写作的动力)
…。。。。。。。。。。。…
…。。。。。。。。。。。…
更多推荐
所有评论(0)