欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 明星 > Java中通过ArrayList扩展数组

Java中通过ArrayList扩展数组

2025/5/6 14:17:21 来源:https://blog.csdn.net/lxsxjsj/article/details/144596321  浏览:    关键词:Java中通过ArrayList扩展数组

在Java中,ArrayList 是一个动态数组实现,能够根据需要自动调整其大小。与传统的数组不同,ArrayList 不需要预先指定大小,并且提供了许多方便的方法来操作集合中的元素。下面将详细介绍如何使用 ArrayList 进行数组的扩展,包括基本用法、常见操作以及一些最佳实践。

 1. 基本概念

 数组(Array):在Java中,数组的大小是固定的,一旦创建就无法更改其大小。如果需要存储更多元素,必须创建一个更大的新数组,并将原数组的元素复制到新数组中。

 ArrayList:ArrayList 是 List 接口的一个实现类,底层使用数组来存储元素。它可以根据需要自动调整大小,提供了动态数组的功能。

 2. 导入必要的包

在使用 ArrayList 之前,需要导入

import java.util.ArrayList;

3. 创建 ArrayList

3.1 使用泛型创建 ArrayList

使用泛型可以指定 ArrayList 中存储的对象类型,这有助于在编译时进行类型检查,避免运行时出现 ClassCastException。

// 创建一个存储 String 类型的 ArrayList
ArrayList<String> arrayList = new ArrayList<>();// 创建一个存储 Integer 类型的 ArrayList,初始容量为 10
ArrayList<Integer> numbers = new ArrayList<>(10);

3.2 不使用泛型创建 ArrayList

如果不使用泛型,ArrayList 将存储 Object 类型的元素,这可能导致类型安全问题。

ArrayList arrayList = new ArrayList();
arrayList.add("Hello");
arrayList.add(123); // 存储不同类型的元素

4. 数组扩展的实现

使用 ArrayList 进行数组扩展非常简单,因为 ArrayList 会自动处理数组大小的调整。以下是一些常见的操作:

4.1 添加元素

ArrayList<String> arrayList = new ArrayList<>();// 添加单个元素
arrayList.add("Apple");
arrayList.add("Banana");
arrayList.add("Cherry");// 在指定位置添加元素
arrayList.add(1, "Blueberry"); // 在索引 1 处添加 "Blueberry"

4.2 移除元素

// 移除指定元素
arrayList.remove("Banana");// 移除指定索引的元素
arrayList.remove(0); // 移除索引 0 处的元素

 4.3 获取元素

String firstElement = arrayList.get(0); // 获取索引 0 处的元素

4.4 遍历 ArrayList
4.4.1 使用增强的 for 循环

for (String fruit : arrayList) {System.out.println(fruit);
}

4.4.2 使用迭代器

Iterator<String> iterator = arrayList.iterator();
while (iterator.hasNext()) {String fruit = iterator.next();System.out.println(fruit);
}

4.4.3 使用 forEach 和 Lambda 表达式

arrayList.forEach(fruit -> System.out.println(fruit))

4.5 查找元素

// 检查元素是否存在
boolean containsApple = arrayList.contains("Apple");// 获取元素的索引
int indexOfApple = arrayList.indexOf("Apple");

4.6 获取大小

int size = arrayList.size();
System.out.println("ArrayList 大小: " + size);

4.7 清空 ArrayList

arrayList.clear();

5. 内部实现原理

ArrayList 内部使用一个数组来存储元素。当添加元素导致数组容量不足时,ArrayList 会自动扩展其容量:

1. 初始容量:ArrayList 的默认初始容量为 10。

2. 扩容机制:当添加元素超过当前容量时,ArrayList 会创建一个新的数组,其大小为原数组的 1.5 倍(具体实现可能因Java版本而异),然后将原数组的元素复制到新数组中。

3. 性能考虑:频繁的扩容操作可能会影响性能,特别是在添加大量元素时。因此,如果预先知道需要存储的元素数量,可以在创建 ArrayList 时指定一个合适的初始容量。

// 指定初始容量为 100
ArrayList<String> arrayList = new ArrayList<>(100);

6. 示例代码

import java.util.ArrayList;
import java.util.Iterator;public class ArrayListExample {public static void main(String[] args) {// 创建一个 ArrayListArrayList<String> fruits = new ArrayList<>();// 添加元素fruits.add("Apple");fruits.add("Banana");fruits.add("Cherry");fruits.add("Date");System.out.println("初始 ArrayList: " + fruits);// 在指定位置添加元素fruits.add(2, "Blueberry");System.out.println("添加 Blueberry 后: " + fruits);// 移除元素fruits.remove("Banana");System.out.println("移除 Banana 后: " + fruits);// 移除指定索引的元素fruits.remove(0);System.out.println("移除索引 0 处的元素后: " + fruits);// 获取元素String firstFruit = fruits.get(0);System.out.println("第一个水果: " + firstFruit);// 查找元素boolean hasApple = fruits.contains("Apple");System.out.println("包含 Apple: " + hasApple);// 获取大小int size = fruits.size();System.out.println("ArrayList 大小: " + size);// 遍历 ArrayListSystem.out.println("遍历 ArrayList:");for (String fruit : fruits) {System.out.println(fruit);}// 使用迭代器遍历System.out.println("使用迭代器遍历:");Iterator<String> iterator = fruits.iterator();while (iterator.hasNext()) {String fruit = iterator.next();System.out.println(fruit);}// 清空 ArrayListfruits.clear();System.out.println("清空后的 ArrayList: " + fruits);}
}

输出:

初始 ArrayList: [Apple, Banana, Cherry, Date]

添加 Blueberry 后: [Apple, Banana, Blueberry, Cherry, Date]

移除 Banana 后: [Apple, Blueberry, Cherry, Date]

移除索引 0 处的元素后: [Blueberry, Cherry, Date]

第一个水果: Blueberry

包含 Apple: false

ArrayList 大小: 3

遍历 ArrayList:

Blueberry

Cherry

Date

使用迭代器遍历:

Blueberry

Cherry

Date

清空后的 ArrayList: []

 7. 常见问题

 7.1 ArrayList 与 LinkedList 的区别

 内部实现:ArrayList 使用数组实现,而 LinkedList 使用双向链表实现。

 访问速度:ArrayList 在随机访问元素时性能更好,而 LinkedList 在频繁插入和删除元素时性能更优。

 内存开销:ArrayList 的内存开销较低,而 LinkedList 需要额外的指针存储前驱和后继节点。

 7.2 ArrayList 与普通数组的区别

 大小可变:ArrayList 可以动态调整大小,而普通数组大小固定。

 方法丰富:ArrayList 提供了许多方便的方法,如 add, remove, contains, indexOf 等。

 泛型支持:ArrayList 支持泛型,提供编译时类型检查。

 8. 总结

ArrayList 是Java中非常常用的集合类,提供了动态数组的功能。通过使用 ArrayList,可以简化数组操作,提高代码的可维护性和灵活性。在选择使用 ArrayList 还是普通数组时,应根据具体需求权衡:

 如果需要频繁添加或删除元素,推荐使用 ArrayList。

 如果对性能有严格要求,且元素数量固定,可以使用普通数组。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词