Java数据结构之ArrayList(如果想知道Java中有关ArrayList的知识点,那么只看这一篇就足够了!)

简介: Java数据结构之ArrayList(如果想知道Java中有关ArrayList的知识点,那么只看这一篇就足够了!)

1.认识ArrayList

       在正式的学习ArrayList之前,我们需要了解一下什么是Java中的ArrayList(顺序表):

       ArrayList是Java中的一个动态数组类,它实现了List接口,可以存储任意类型的对象,并且大小可以动态地调整。ArrayList允许在列表的任意位置进行元素的插入、删除、获取等操作,而且它还能自动扩展内部数组的容量,以适应存储需求的增长。

ArrayList是一个普通的类,实现了List接口,具体框架图如下:

读到这就会有读者发问了,ArrayList到底是怎么去实现这些功能的呢?,它的底层原理到底是怎么样的呢?答案如下:

ArrayList的实现原理:

       ArrayList的内部实现是基于数组的,它使用一个Object类型的数组来存储元素。当创建一个ArrayList实例时,会初始化一个默认大小的数组,当数组容量不足以存储新的元素时,ArrayList会自动扩展数组的大小,通常会将当前数组的容量增加一倍,并将原来的元素复制到新数组中,当然其他的操作也是类似。

通过上面的描述,我们就大致的了解了Java中ArrayList(顺序表)了。

2.ArrayList的创建

       了解完了Java中ArrayList(顺序表),那么我们如何去创建并使用它呢?在Java中给我们提供了三种创建ArrayList(顺序表)的方式。

创建方式 解释
ArrayList() 无参构造
ArrayList(int initialCapacity) 指定顺序表初始容量
ArrayList(Collection<? extends E> c) 利用其他 Collection 构建 ArrayList

现在让我们使用三种不同的方式来创建一下ArrayList(顺序表):

 

(1)使用默认构造函数创建一个空的 ArrayList:

import java.util.ArrayList;
 
public class Main {
    public static void main(String[] args) {
        // 创建一个空的 ArrayList
        ArrayList<String> list1 = new ArrayList<>();
        
        // 添加元素到 ArrayList(这里可以先看一下就可以)
        list1.add("Apple");
        list1.add("Banana");
        list1.add("Orange");
        
        // 打印 ArrayList
        System.out.println("ArrayList 1: " + list1);
    }
}

(2)使用带有初始容量的构造函数创建 ArrayList:

import java.util.ArrayList;
 
public class Main {
    public static void main(String[] args) {
        // 创建一个具有初始容量的 ArrayList
        ArrayList<Integer> list2 = new ArrayList<>(5);
        
        // 添加元素到 ArrayList(这里先看一下就可以)
        list2.add(10);
        list2.add(20);
        list2.add(30);
        
        // 打印 ArrayList
        System.out.println("ArrayList 2: " + list2);
    }
}

(3)使用 ArrayList(Collection<? extends E> c) 构造函数创建 ArrayList 的简单示例:

import java.util.ArrayList;
import java.util.List;
 
public class Main {
    public static void main(String[] args) {
        // 创建一个包含初始元素的集合
        List<String> originalList = new ArrayList<>();
        originalList.add("Apple");
        originalList.add("Banana");
        originalList.add("Orange");
        
        // 使用原始集合创建一个新的 ArrayList
        ArrayList<String> newList = new ArrayList<>(originalList);
        
        // 打印新的 ArrayList
        System.out.println("New ArrayList: " + newList);
    }
}

这样我们就了解了如何在Java中创建ArrayList(顺序表)了。

3.ArrayList的遍历

       在认识ArrayList的段落中,我们知道了ArrayList的底层是一个动态数组,既然是数组的话,我们是不是可以像遍历数组一样遍历ArrayList呢?答案是——是的,但是在此之上我们还可以使用迭代器对其进行遍历。

遍历ArrayList的方式:

       (1)使用for循环

for (int i = 0; i < list.size(); i++) {
    int element = list.get(i);
    System.out.println(element);
}

       (2)使用增强型for循环:

for (int element : list) {
    System.out.println(element);
}

     

       (3)使用迭代器

Iterator<Integer> iterator = list.iterator();
while (iterator.hasNext()) {
    int element = iterator.next();
    System.out.println(element);
}

       以上就是三种遍历Java中ArrayList的方式,每种方式都有其适用的场景,我们需要根据实际需求选择最合适的方式来遍历ArrayList对象。

4.ArrayList常用API

       在上文中,我们大致的了解了什么是Java中的ArrayList,以及学会了创建和遍历Java中的ArrayList,现在让我们学习一下Java中提供给我们的ArrayList中的常用API。

先让我们看一下有哪些常用的ArrayList中的API:

常用方法 解释
boolean add(E e) 尾插 e
void add(int index, E element) 将 e 插入到 index 位置
boolean addAll(Collection<? extends E> c) 尾插 c 中的元素
E remove(int index) 删除 index 位置元素
boolean remove(Object o) 删除遇到的第一个 o
E get(int index) 获取下标 index 位置元素
E set(int index, E element) 将下标 index 位置元素设置为 element
void clear() 清空
boolean contains(Object o) 判断 o 是否在线性表中
int indexOf(Object o) 返回第一个 o 所在下标
int lastIndexOf(Object o) 返回最后一个 o 的下标
List<E> subList(int fromIndex, int toIndex) 截取部分 list

这里我们一个一个的进行实例演示:

       (1)boolean add(E e)——尾插 e

import java.util.ArrayList;
 
public class Main {
    public static void main(String[] args) {
        // 创建一个空的 ArrayList
        ArrayList<String> list = new ArrayList<>();
        
        // 向 ArrayList 中添加元素
        list.add("Apple");
        
        // 打印添加操作的结果
        System.out.println(list); // 输出:Apple
    }
}

       在这个示例中,我们创建了一个空的 ArrayList,然后使用 add() 方法向其中添加了一个元素 "Apple",最后打印了list。

     

       (2)void add(int index, E element)——将 e 插入到 index 位置

import java.util.ArrayList;
 
public class Main {
    public static void main(String[] args) {
        // 创建一个空的 ArrayList
        ArrayList<String> list = new ArrayList<>();
        
        // 向 ArrayList 中指定位置添加元素
        list.add("Apple");
        list.add("Banana");
        list.add("Orange");
        System.out.println(list); // 输出:[Apple, Banana, Orange]
        
        list.add(1, "Grapes"); // 在索引 1 处添加元素 "Grapes"
        
        // 打印添加后的 ArrayList
        System.out.println(list); // 输出:[Apple, Grapes, Banana, Orange]
    }
}

       在这个示例中,我们创建了一个空的 ArrayList,然后使用 add() 方法向其中添加了三个元素:"Apple"、"Banana" 和 "Orange"。接着,我们使用 add(int index, E element) 方法在索引 1 处添加了元素 "Grapes"。最后,我们打印了添加后的 ArrayList,可以看到 "Grapes" 被成功添加到了索引 1 处。

       (3)boolean addAll(Collection<? extends E> c)——尾插 c 中的元素

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
 
public class Main {
    public static void main(String[] args) {
        // 创建一个空的 ArrayList
        ArrayList<String> list1 = new ArrayList<>();
        list1.add("Apple");
        list1.add("Banana");
        
        // 创建一个包含元素的集合
        List<String> elementsToAdd = Arrays.asList("Orange", "Grapes");
        
        // 使用 addAll() 方法将集合中的元素添加到 ArrayList 中
        list1.addAll(elementsToAdd);   
       
        // 打印最终的 ArrayList
        System.out.println(list1); // 输出:[Apple, Banana, Orange, Grapes]
    }
}

       在这个示例中,我们创建了一个空的 ArrayList,然后向其中添加了两个元素:"Apple" 和 "Banana"。接着,我们创建了一个包含两个元素的集合 elementsToAdd。最后,我们使用 addAll() 方法将集合 elementsToAdd 中的元素添加到 ArrayList 中。

       (4)E remove(int index)——删除 index 位置元素

import java.util.ArrayList;
 
public class Main {
    public static void main(String[] args) {
        // 创建一个包含几个元素的 ArrayList
        ArrayList<String> list = new ArrayList<>();
        list.add("Apple");
        list.add("Banana");
        list.add("Orange");
        
        // 打印原始的 ArrayList
        System.out.println("Original ArrayList: " + list); // 输出:[Apple, Banana, Orange]
        
        // 移除索引为 1 处的元素
        String removedElement = list.remove(1);
        
        // 打印被移除的元素和最终的 ArrayList
        System.out.println("Removed element: " + removedElement); // 输出:Banana
        System.out.println("Final ArrayList: " + list); // 输出:[Apple, Orange]
    }
}

       在这个示例中,我们创建了一个包含三个元素的 ArrayList,然后使用 remove(int index) 方法移除了索引为 1 处的元素 "Banana"。最后,我们打印了被移除的元素和最终的 ArrayList,可以看到 "Banana" 被成功移除了。

       (5)boolean remove(Object o)——删除遇到的第一个 o

import java.util.ArrayList;
 
public class Main {
    public static void main(String[] args) {
        // 创建一个包含几个元素的 ArrayList
        ArrayList<String> list = new ArrayList<>();
        list.add("Apple");
        list.add("Banana");
        list.add("Orange");
        
        // 打印原始的 ArrayList
        System.out.println("Original ArrayList: " + list); // 输出:[Apple, Banana, Orange]
        
        // 移除元素 "Banana"
        list.remove("Banana");
        
        // 打印最终的 ArrayList
        System.out.println(list); // 输出:[Apple, Orange]
    }
}

       在这个示例中,我们创建了一个包含三个元素的 ArrayList,然后使用 remove(Object o) 方法移除了元素 "Banana"。最后,我们打印了最终的 ArrayList,可以看到 "Banana" 被成功移除了。

       (6)E get(int index)——获取下标 index 位置元素

import java.util.ArrayList;
 
public class Main {
    public static void main(String[] args) {
        // 创建一个包含几个元素的 ArrayList
        ArrayList<String> list = new ArrayList<>();
        list.add("Apple");
        list.add("Banana");
        list.add("Orange");
        
        // 获取索引为 1 处的元素
        String element = list.get(1);
        
        // 打印获取到的元素
        System.out.println(element); // 输出:Banana
    }
}

       在这个示例中,我们创建了一个包含三个元素的 ArrayList,然后使用 get(int index) 方法获取了索引为 1 处的元素。最后,我们打印了获取到的元素,可以看到获取操作成功返回了 "Banana" 这个元素。

       (7)E set(int index, E element)——将下标 index 位置元素设置为 element

import java.util.ArrayList;
 
public class Main {
    public static void main(String[] args) {
        // 创建一个包含几个元素的 ArrayList
        ArrayList<String> list = new ArrayList<>();
        list.add("Apple");
        list.add("Banana");
        list.add("Orange");
        
        // 打印原始的 ArrayList
        System.out.println(list); // 输出:[Apple, Banana, Orange]
        
        // 将索引为 1 处的元素替换为 "Grapes"
        list.set(1, "Grapes");
        
        // 打印最终的 ArrayList
        System.out.println(list); // 输出:[Apple, Grapes, Orange]
    }
}

       在这个示例中,我们创建了一个包含三个元素的 ArrayList,然后使用 set(int index, E element) 方法将索引为 1 处的元素 "Banana" 替换为 "Grapes"。最后,我们打印了最终的 ArrayList,可以看到替换操作成功地将 "Banana" 替换为了 "Grapes"。

       (8)void clear()——清空

import java.util.ArrayList;
 
public class Main {
    public static void main(String[] args) {
        // 创建一个包含几个元素的 ArrayList
        ArrayList<String> list = new ArrayList<>();
        list.add("Apple");
        list.add("Banana");
        list.add("Orange");
        
        // 打印原始的 ArrayList
        System.out.println(list); // 输出:[Apple, Banana, Orange]
        
        // 使用 clear() 方法清空 ArrayList
        list.clear();
        
        // 打印清空后的 ArrayList
        System.out.println(list); // 输出:[]
    }
}

       在这个示例中,我们创建了一个包含三个元素的 ArrayList,然后使用 clear() 方法清空了该列表。最后,我们打印了清空后的 ArrayList,可以看到列表中不再包含任何元素。

       (9)boolean contains(Object o)——判断 o 是否在线性表中

import java.util.ArrayList;
 
public class Main {
    public static void main(String[] args) {
        // 创建一个包含几个元素的 ArrayList
        ArrayList<String> list = new ArrayList<>();
        list.add("Apple");
        list.add("Banana");
        list.add("Orange");
        
        // 检查 ArrayList 是否包含元素 "Banana"
        boolean containsBanana = list.contains("Banana");
        
        // 打印检查结果
        System.out.println(containsBanana); // 输出:true
    }
}

       在这个示例中,我们创建了一个包含三个元素的 ArrayList,然后使用 contains(Object o) 方法检查列表中是否包含元素 "Banana"。最后,我们打印了检查结果,可以看到列表中确实包含 "Banana" 元素。

       (10)int indexOf(Object o)——返回第一个 o 所在下标

import java.util.ArrayList;
 
public class Main {
    public static void main(String[] args) {
        // 创建一个包含几个元素的 ArrayList
        ArrayList<String> list = new ArrayList<>();
        list.add("Apple");
        list.add("Banana");
        list.add("Orange");
        
        // 获取元素 "Banana" 在 ArrayList 中的索引
        int index = list.indexOf("Banana");
        
        // 打印索引值
        System.out.println(index); // 输出:1
    }
}

       在这个示例中,我们创建了一个包含三个元素的 ArrayList,然后使用 indexOf(Object o) 方法获取了元素 "Banana" 在列表中的索引。最后,我们打印了索引值,可以看到 "Banana" 元素的索引是 1。

       (11)int lastIndexOf(Object o)——返回最后一个 o 的下标

import java.util.ArrayList;
 
public class Main {
    public static void main(String[] args) {
        // 创建一个包含几个元素的 ArrayList
        ArrayList<String> list = new ArrayList<>();
        list.add("Apple");
        list.add("Banana");
        list.add("Orange");
        list.add("Banana");
        
        // 获取元素 "Banana" 在 ArrayList 中的最后一个索引
        int lastIndex = list.lastIndexOf("Banana");
        
        // 打印最后一个索引值
        System.out.println(lastIndex); // 输出:3
    }
}

       在这个示例中,我们创建了一个包含四个元素的 ArrayList,其中包含两个 "Banana" 元素。然后使用 lastIndexOf(Object o) 方法获取了元素 "Banana" 在列表中的最后一个索引。最后,我们打印了最后一个索引值,可以看到最后一个 "Banana" 元素的索引是 3。

       (12)List<E> subList(int fromIndex, int toIndex)——截取部分 list

import java.util.ArrayList;
import java.util.List;
 
public class Main {
    public static void main(String[] args) {
        // 创建一个包含几个元素的 ArrayList
        ArrayList<String> list = new ArrayList<>();
        list.add("Apple");
        list.add("Banana");
        list.add("Orange");
        list.add("Grapes");
        list.add("Kiwi");
        
        // 获取子列表,包括索引 1 到 3 的元素,但不包括索引 3
        List<String> subList = list.subList(1, 3);
        
        // 打印子列表
        System.out.println(subList); // 输出:[Banana, Orange]
    }
}

       在这个示例中,我们创建了一个包含五个元素的 ArrayList,然后使用 subList(int fromIndex, int toIndex) 方法获取了子列表,包括索引 1 到 3 的元素,但不包括索引 3。最后,我们打印了子列表,可以看到子列表包含了 "Banana" 和 "Orange" 元素。

注意:

       在使用List<E> subList(int fromIndex, int toIndex)方法的时候,我们对获取的子列表进行修改的时候,原来的列表也会被修改。

这样我们就大致的了解了Java中ArrayList的常用API了。

相关文章
|
8月前
|
Java 数据库连接 数据库
Java 相关知识点总结含基础语法进阶技巧及面试重点知识
本文全面总结了Java核心知识点,涵盖基础语法、面向对象、集合框架、并发编程、网络编程及主流框架如Spring生态、MyBatis等,结合JVM原理与性能优化技巧,并通过一个学生信息管理系统的实战案例,帮助你快速掌握Java开发技能,适合Java学习与面试准备。
367 2
Java 相关知识点总结含基础语法进阶技巧及面试重点知识
|
8月前
|
存储 Java 程序员
Java 基础知识点全面梳理包含核心要点及难点解析 Java 基础知识点
本文档系统梳理了Java基础知识点,涵盖核心特性、语法基础、面向对象编程、数组字符串、集合框架、异常处理及应用实例,帮助初学者全面掌握Java入门知识,提升编程实践能力。附示例代码下载链接。
318 1
|
8月前
|
Java 编译器 数据安全/隐私保护
Java 大学期末考试真题与答案 含知识点总结 重难点归纳及题库汇总 Java 期末备考资料
本文汇总了Java大学期末考试相关资料,包含真题与答案、知识点总结、重难点归纳及题库,涵盖Java基础、面向对象编程、异常处理、IO流等内容,并提供完整代码示例与技术方案,助你高效复习备考。
785 3
|
9月前
|
存储 安全 Java
2025 年最新 40 个 Java 基础核心知识点全面梳理一文掌握 Java 基础关键概念
本文系统梳理了Java编程的40个核心知识点,涵盖基础语法、面向对象、集合框架、异常处理、多线程、IO流、反射机制等关键领域。重点包括:JVM运行原理、基本数据类型、封装/继承/多态三大特性、集合类对比(ArrayList vs LinkedList、HashMap vs TreeMap)、异常分类及处理方式、线程创建与同步机制、IO流体系结构以及反射的应用场景。这些基础知识是Java开发的根基,掌握后能为后续框架学习和项目开发奠定坚实基础。文中还提供了代码资源获取方式,方便读者进一步实践学习。
2350 2
|
8月前
|
存储 缓存 安全
Java基础 - 知识点
Java基础知识点涵盖语言特性、面向对象与基本数据类型、缓存池机制、String类特性、参数传递、类型转换、继承、抽象类与接口区别、重写与重载、Object通用方法及关键字使用等核心内容,是掌握Java编程的重要基石。
129 0
|
9月前
|
并行计算 Java API
Java 入门循环结构基础知识点详解
摘要:本文介绍了Java现代循环技术的进阶应用,包括Stream API、响应式编程和模式匹配,展示了如何用Stream API替代传统循环进行声明式集合处理(如过滤、映射和并行计算),以及响应式编程在异步非阻塞场景下的优势。文章还通过电商订单处理系统的案例演示了这些技术的综合应用,并提供了性能优化建议,如合理使用并行处理和避免循环内对象创建。这些现代特性使Java代码更简洁、高效,更适合高并发和I/O密集型场景。
119 1
|
9月前
|
缓存 算法 NoSQL
校招 Java 面试高频常见知识点深度解析与实战案例详细分享
《2025校招Java面试核心指南》总结了Java技术栈的最新考点,涵盖基础语法、并发编程和云原生技术三大维度: 现代Java特性:重点解析Java 17密封类、Record类型及响应式Stream API,通过电商案例演示函数式数据处理 并发革命:对比传统线程池与Java 21虚拟线程,详解Reactor模式在秒杀系统中的应用及背压机制 云原生实践:提供Spring Boot容器化部署方案,分析Spring WebFlux响应式编程和Redis Cluster缓存策略。
239 0
|
8月前
|
缓存 安全 前端开发
Java 核心知识点与实战应用解析
我梳理的这些内容涵盖了 Java 众多核心知识点。包括 final 关键字的作用(修饰类、方法、变量的特性);重载与重写的区别;反射机制的定义、优缺点及项目中的应用(如结合自定义注解处理数据、框架底层实现)。 还涉及 String、StringBuffer、StringBuilder 的差异;常见集合类及线程安全类,ArrayList 与 LinkedList 的区别;HashMap 的实现原理、put 流程、扩容机制,以及 ConcurrentHashMap 的底层实现。 线程相关知识中,创建线程的四种方式,Runnable 与 Callable 的区别,加锁方式(synchronize
148 0
|
9月前
|
存储 设计模式 Java
Java 期末考试不挂科必背基础知识点复习笔记整理
这是一份全面的Java基础知识点复习笔记,涵盖核心特性、数据类型、流程控制、数组、异常处理、JVM原理、多线程、设计模式及Java 8+新特性等内容。结合买飞机票、验证码生成和评委打分等应用实例,助你掌握考试重点,轻松应对Java期末考试,避免挂科!附带代码资源,供深入学习使用。链接:[https://pan.quark.cn/s/14fcf913bae6](https://pan.quark.cn/s/14fcf913bae6)
463 0

热门文章

最新文章