掌握聚合最新动态了解行业最新趋势
API接口,开发服务,免费咨询服务

ArrayList在Java中的用法 ArrayList和LinkedList的区别

Java 是一种广泛使用的编程语言,其标准库提供了丰富的集合类,用于处理不同类型的数据结构。在 Java 集合框架中,ArrayList 和 LinkedList 是两种常用的集合类,它们都实现了 List 接口,但在底层实现和性能特性上存在显著差异。本文将详细介绍 ArrayList 的用法,并深入探讨它与 LinkedList 的区别,帮助开发者更好地选择合适的集合类来满足不同的应用场景。

一、ArrayList 的基本概念与用法

  1. 什么是 ArrayList

定义:ArrayList 是 Java 集合框架中的一个类,位于 java.util 包中。它是一个基于动态数组的数据结构,允许存储任意类型的对象。

特点动态扩容:当数组容量不足时,ArrayList 会自动增加容量。

允许存储重复元素。

提供索引访问的方式。

  1. 创建和初始化

ArrayList
基本语法// 创建空的 ArrayList
List<String> list = new ArrayList<>();
// 初始化 ArrayList
List<String> list = new ArrayList<>(Arrays.asList("Apple", "Banana", "Orange"));
  1. 示例代码

import java.util.ArrayList;
import java.util.Arrays;
public class ArrayListExample {
    public static void main(String[] args) {
        // 创建空的 ArrayList
        ArrayList<String> fruits = new ArrayList<>();
        fruits.add("Apple");
        fruits.add("Banana");
        // 添加元素
        fruits.add("Orange");
        // 获取元素
        System.out.println(fruits.get(1)); // 输出 Banana
        // 遍历 ArrayList
        for (String fruit : fruits) {
            System.out.println(fruit);
        }
    }
}
  1. 常见操作

添加元素

list.add("Item");

删除元素

list.remove("Item");

获取元素

String item = list.get(index);

遍历

ArrayListfor (int i = 0; i < list.size(); i++) {
    System.out.println(list.get(i));
}
  1. 性能分析

时间复杂度增删改查查询操作(get):O(1),因为 ArrayList 使用数组实现,可以通过索引直接访问元素。

插入操作(add):平均 O(n),最坏情况下需要移动大量元素。

删除操作(remove):平均 O(n),最坏情况下需要移动大量元素。

空间复杂度初始容量为 10,每次扩容时增加 50%。

二、LinkedList 的基本概念与用法

  1. 什么是 LinkedList

定义:LinkedList 是另一个实现 List 接口的集合类,同样位于 java.util 包中。它基于双向链表实现,每个节点包含数据和指向前后节点的引用。

特点插入和删除操作效率高。

不支持随机访问(即无法通过索引直接访问元素)。

允许存储重复元素。

  1. 创建和初始化

LinkedList
基本语法// 创建空的 LinkedList
List<String> list = new LinkedList<>();
// 初始化 LinkedList
List<String> list = new LinkedList<>(Arrays.asList("Apple", "Banana", "Orange"));
  1. 示例代码

import java.util.LinkedList;
import java.util.Arrays;
public class LinkedListExample {
    public static void main(String[] args) {
        // 创建空的 LinkedList
        LinkedList<String> fruits = new LinkedList<>();
        fruits.add("Apple");
        fruits.add("Banana");
        // 添加元素
        fruits.addFirst("Orange"); // 在头部插入
        fruits.addLast("Grape");   // 在尾部插入
        // 获取元素
        System.out.println(fruits.getFirst()); // 输出 Orange
        // 遍历 LinkedList
        for (String fruit : fruits) {
            System.out.println(fruit);
        }
    }
}
  1. 常见操作

添加元素

list.add("Item");
list.addFirst("Head");
list.addLast("Tail");

删除元素

list.remove("Item");
list.removeFirst();
list.removeLast();

获取元素

String head = list.getFirst();
String tail = list.getLast();
  1. 性能分析

时间复杂度增删改查查询操作(get):O(n),因为需要从头或尾遍历链表。

插入操作(add):O(1),在链表头部或尾部插入效率很高。

删除操作(remove):O(1),在链表头部或尾部删除效率很高。

空间复杂度每个节点占用额外的空间存储前后指针。

三、ArrayList 与 LinkedList 的主要区别

  1. 底层实现

ArrayList基于动态数组实现。

元素连续存储,支持随机访问。

LinkedList基于双向链表实现。

元素非连续存储,不支持随机访问。

  1. 性能对比

查询操作ArrayList:O(1),通过索引直接访问。

LinkedList:O(n),需要从头或尾遍历链表。

插入和删除操作ArrayList:O(n),可能需要移动大量元素。

LinkedList:O(1),在链表头部或尾部插入/删除效率高。

  1. 内存占用

ArrayList元素连续存储,内存利用率高。

LinkedList每个节点占用额外的空间存储前后指针,内存占用较高。

  1. 适用场景

ArrayList适用于频繁查询的操作。

数据量较大且需要随机访问的场景。

LinkedList适用于频繁插入和删除的操作。

数据量较小且不需要随机访问的场景。

  1. 示例对比

查询操作

ArrayList<Integer> arrayList = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5));
System.out.println(arrayList.get(2)); // 输出 3
LinkedList<Integer> linkedList = new LinkedList<>(Arrays.asList(1, 2, 3, 4, 5));
System.out.println(linkedList.get(2)); // 输出 3
插入操作arrayList.add(2, 99); // 在索引 2 处插入 99
linkedList.add(2, 99); // 在索引 2 处插入 99

线程安全性

ArrayList非线程安全。

LinkedList非线程安全。

迭代器

ArrayList使用普通迭代器。

LinkedList使用双向

ArrayList在Java中的用法 ArrayList和LinkedList的区别

选择合适的集合类对于程序的性能和可维护性至关重要。开发者应根据具体需求权衡两者的特点,合理选用集合类。希望本文的内容能够帮助读者更好地理解 ArrayList 和 LinkedList 的工作原理和应用场景,为实际开发提供有价值的参考。

声明:所有来源为“聚合数据”的内容信息,未经本网许可,不得转载!如对内容有异议或投诉,请与我们联系。邮箱:marketing@think-land.com

  • 车辆过户信息查询

    通过车辆vin码查询车辆的过户次数等相关信息

    通过车辆vin码查询车辆的过户次数等相关信息

  • 银行卡五元素校验

    验证银行卡、身份证、姓名、手机号是否一致并返回账户类型

    验证银行卡、身份证、姓名、手机号是否一致并返回账户类型

  • 高风险人群查询

    查询个人是否存在高风险行为

    查询个人是否存在高风险行为

  • 全球天气预报

    支持全球约2.4万个城市地区天气查询,如:天气实况、逐日天气预报、24小时历史天气等

    支持全球约2.4万个城市地区天气查询,如:天气实况、逐日天气预报、24小时历史天气等

  • 购物小票识别

    支持识别各类商场、超市及药店的购物小票,包括店名、单号、总金额、消费时间、明细商品名称、单价、数量、金额等信息,可用于商品售卖信息统计、购物中心用户积分兑换及企业内部报销等场景

    支持识别各类商场、超市及药店的购物小票,包括店名、单号、总金额、消费时间、明细商品名称、单价、数量、金额等信息,可用于商品售卖信息统计、购物中心用户积分兑换及企业内部报销等场景

0512-88869195
数 据 驱 动 未 来
Data Drives The Future