Java List实战:手把手教你玩转ArrayList和LinkedList

简介: 【6月更文挑战第17天】在Java中,ArrayList和LinkedList是List接口的实现,分别基于动态数组和双向链表。ArrayList适合索引访问,提供快速读取,而LinkedList擅长插入和删除操作。通过示例展示了两者的基本用法,如添加、访问、修改和删除元素。根据场景选择合适的实现能优化性能。

在Java的编程世界中,List作为一种常见的数据结构,广泛应用于各种场景。其中,ArrayList和LinkedList作为List接口的两个主要实现类,各有特色,使用场景也各不相同。今天,我们就来手把手地教你如何玩转这两个强大的工具。

一、ArrayList:动态数组的魔力

ArrayList,顾名思义,是一个可以动态调整大小的数组。它的内部实现基于数组,因此具有数组的特性,比如支持通过索引快速访问元素。同时,它又可以像链表一样动态地增加或减少元素,无需预先分配固定的空间。

示例代码:

java
import java.util.ArrayList;

public class ArrayListDemo {
public static void main(String[] args) {
// 创建一个ArrayList
ArrayList arrayList = new ArrayList<>();

    // 添加元素  
    arrayList.add("元素1");  
    arrayList.add("元素2");  

    // 访问元素  
    System.out.println(arrayList.get(0)); // 输出:元素1  

    // 遍历元素  
    for (String item : arrayList) {  
        System.out.println(item);  
    }  

    // 修改元素  
    arrayList.set(0, "修改后的元素1");  

    // 删除元素  
    arrayList.remove("元素2");  

    // 再次遍历元素  
    for (String item : arrayList) {  
        System.out.println(item);  
    }  
}  

}
实战技巧:

当需要频繁地通过索引访问元素时,ArrayList是首选。
如果能预知元素的大致数量,可以在创建ArrayList时指定初始容量,以减少扩容带来的性能开销。
二、LinkedList:双向链表的魅力

LinkedList是一个基于双向链表的List实现。与ArrayList不同,LinkedList在添加和删除元素时具有更高的效率,因为只需要改变相邻节点的引用关系即可。但是,LinkedList在随机访问元素时性能较差,因为它需要从头或尾开始遍历。

示例代码:

java
import java.util.LinkedList;

public class LinkedListDemo {
public static void main(String[] args) {
// 创建一个LinkedList
LinkedList linkedList = new LinkedList<>();

    // 添加元素  
    linkedList.add("元素A");  
    linkedList.addFirst("元素B"); // 在开头添加  
    linkedList.addLast("元素C");  // 在结尾添加  

    // 访问元素  
    System.out.println(linkedList.getFirst()); // 输出:元素B  

    // 遍历元素  
    for (String item : linkedList) {  
        System.out.println(item);  
    }  

    // 删除元素  
    linkedList.removeFirst(); // 删除开头元素  

    // 再次遍历元素  
    for (String item : linkedList) {  
        System.out.println(item);  
    }  
}  

}
实战技巧:

当需要在列表的开头或结尾频繁地添加或删除元素时,LinkedList是更好的选择。
由于LinkedList不支持通过索引直接访问元素,因此在需要频繁随机访问元素的场景下,ArrayList可能更加合适。
通过本文的实战指导,相信你已经对ArrayList和LinkedList有了更深入的了解。在实际开发中,你可以根据具体需求选择适合的List实现类,以提高程序的性能和效率。

相关文章
|
1月前
|
Java 索引 容器
Java ArrayList扩容的原理
Java 的 `ArrayList` 是基于数组实现的动态集合。初始时,`ArrayList` 底层创建一个空数组 `elementData`,并设置 `size` 为 0。当首次添加元素时,会调用 `grow` 方法将数组扩容至默认容量 10。之后每次添加元素时,如果当前数组已满,则会再次调用 `grow` 方法进行扩容。扩容规则为:首次扩容至 10,后续扩容至原数组长度的 1.5 倍或根据实际需求扩容。例如,当需要一次性添加 100 个元素时,会直接扩容至 110 而不是 15。
Java ArrayList扩容的原理
|
15天前
|
Java 程序员
Java基础却常被忽略:全面讲解this的实战技巧!
小米,29岁程序员,分享Java中`this`关键字的用法。`this`代表当前对象引用,用于区分成员变量与局部变量、构造方法间调用、支持链式调用及作为参数传递。文章还探讨了`this`在静态方法和匿名内部类中的使用误区,并提供了练习题。
18 1
|
25天前
|
安全 Java 开发者
Java 多线程并发控制:深入理解与实战应用
《Java多线程并发控制:深入理解与实战应用》一书详细解析了Java多线程编程的核心概念、并发控制技术及其实战技巧,适合Java开发者深入学习和实践参考。
48 6
|
25天前
|
存储 安全 Java
Java多线程编程中的并发容器:深入解析与实战应用####
在本文中,我们将探讨Java多线程编程中的一个核心话题——并发容器。不同于传统单一线程环境下的数据结构,并发容器专为多线程场景设计,确保数据访问的线程安全性和高效性。我们将从基础概念出发,逐步深入到`java.util.concurrent`包下的核心并发容器实现,如`ConcurrentHashMap`、`CopyOnWriteArrayList`以及`BlockingQueue`等,通过实例代码演示其使用方法,并分析它们背后的设计原理与适用场景。无论你是Java并发编程的初学者还是希望深化理解的开发者,本文都将为你提供有价值的见解与实践指导。 --- ####
|
1月前
|
存储 Java 索引
Java中的数据结构:ArrayList和LinkedList的比较
【10月更文挑战第28天】在Java编程世界中,数据结构是构建复杂程序的基石。本文将深入探讨两种常用的数据结构:ArrayList和LinkedList,通过直观的比喻和实例分析,揭示它们各自的优势与局限,帮助你在面对不同的编程挑战时做出明智的选择。
|
2月前
|
安全 Java 程序员
深入Java集合框架:解密List的Fail-Fast与Fail-Safe机制
本文介绍了 Java 中 List 的遍历和删除操作,重点讨论了快速失败(fail-fast)和安全失败(fail-safe)机制。通过普通 for 循环、迭代器和 foreach 循环的对比,详细解释了各种方法的优缺点及适用场景,特别是在多线程环境下的表现。最后推荐了适合高并发场景的 fail-safe 容器,如 CopyOnWriteArrayList 和 ConcurrentHashMap。
64 5
|
2月前
|
Java 程序员 编译器
Java|如何正确地在遍历 List 时删除元素
从源码分析如何正确地在遍历 List 时删除元素。为什么有的写法会导致异常,而另一些不会。
36 3
|
2月前
|
Java 程序员
Java|List.subList 踩坑小记
不应该仅凭印象和猜测,就开始使用一个方法,至少花一分钟认真读完它的官方注释文档。
26 1
|
2月前
|
安全 Java 程序员
Java集合之战:ArrayList vs LinkedList,谁才是你的最佳选择?
本文介绍了 Java 中常用的两个集合类 ArrayList 和 LinkedList,分析了它们的底层实现、特点及适用场景。ArrayList 基于数组,适合频繁查询;LinkedList 基于链表,适合频繁增删。文章还讨论了如何实现线程安全,推荐使用 CopyOnWriteArrayList 来提升性能。希望帮助读者选择合适的数据结构,写出更高效的代码。
74 3
|
6月前
|
安全 Java
java线程之List集合并发安全问题及解决方案
java线程之List集合并发安全问题及解决方案
1001 1