Java基础快速入门:从数组到集合,掌握ArrayList

java ArrayList集合 什么是集合​ 提供一种存储空间可变的存储模型,存储的数据容量可以发生改变ArrayList集合的特点​ 长度可以变化,只能存储引用数据类型。泛型的使用​ 用于约束集合中存储元素的数据类型。 阅读详情

本文纲要

  1. 集合与数组的区别 —— 对象数组初体验
  2. ArrayList的构造方法与添加方法
  3. ArrayList常用成员方法(增删改查)
  4. 集合存储字符串并遍历
  5. 集合存储学生对象并遍历
  6. 键盘录入学生信息到集合
  7. 集合删除元素的注意事项
  8. 集合数据筛选 —— 方法返回新集合

集合与数组的区别 —— 对象数组初体验

数组和集合都是Java中用来存储数据的容器,但它们有一个关键区别:数组长度固定,集合长度可变。
在正式学习集合之前,我们先看一个案例:用数组存储自定义的学生对象。

需求
将(张三,23)、(李四,24)、(王五,25)这三组数据封装为三个学生对象,存入数组,然后遍历数组打印学生信息。

思路分析

  1. 定义学生类 Student,封装姓名和年龄
  2. 创建长度为3的 Student 类型数组
  3. 创建三个学生对象
  4. 将学生对象存入数组
  5. 遍历数组,取出每个学生对象,调用 getName()、getAge() 输出信息

代码实现
Student 类(位于 com.wb.domain 包):

package com.wb.domain;
 
public class Student {
    private String name;
    private int age;
 
    public Student() {
    }
 
    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    public int getAge() {
        return age;
    }
 
    public void setAge(int age) {
        this.age = age;
    }
}

测试类 TestObjectArray:

package com.wb.array;
 
import com.wb.domain.Student;
 
public class TestObjectArray {
    public static void main(String[] args) {
        // 2. 动态初始化长度为3的数组,类型为Student类型 
        Student[] arr = new Student[3];
        // 3. 根据需求创建3个学生对象 
        Student stu1 = new Student("张三", 23);
        Student stu2 = new Student("李四", 24);
        Student stu3 = new Student("王五", 25);
        // 4. 将学生对象存入数组
        arr[0] = stu1;
        arr[1] = stu2;
        arr[2] = stu3;
        // 5. 遍历数组,取出每一个学生对象
        for (int i = 0; i < arr.length; i++) {
            Student temp = arr[i];
            System.out.println(temp.getName() + "..." + temp.getAge());
        }
    }
}

运行结果:

张三...23
李四...24
王五...25 

数组的局限性

  • 如果此时来了一个新学生“赵六”,数组已经满了,无法添加
  • 虽然可以手动创建新数组并复制旧数据,但非常麻烦
  • 我们期望有一个“懂事”的容器,能自动扩容,这就是集合

集合与数组的对比

  • 共同点:都是存储数据的容器
  • 不同点:
    • 数组长度固定,定义后不可改变
    • 集合长度可变,可以自动扩容
    • 应用场景:需要频繁增删数据时,优先使用集合

ArrayList的构造方法与添加方法

Java中集合类很多,基础入门我们先学习 ArrayList
它底层仍然是数组实现,但提供了自动扩容的能力

1 ) 创建ArrayList对象

构造方法:ArrayList(),创建一个初始容量为10的空列表。
使用泛型限制集合存储的数据类型,语法:ArrayList<数据类型> 变量名 = new ArrayList<>();
JDK 7 起,右侧尖括号可省略类型,自动推断。

import java.util.ArrayList;
 
public class Demo1ArrayList {
    public static void main(String[] args) {
        // 创建只存储字符串的集合 
        ArrayList<String> list = new ArrayList<>();
        // 如果不加泛型,可以存储任意类型,但类型不安全,不推荐
    }
}

2 ) 添加元素

ArrayList 提供了两个添加方法:

方法说明
boolean add(E e)将元素添加到列表末尾
void add(int index, E element)将元素插入到指定索引位置(插队)

示例:

ArrayList<String> list = new ArrayList<>();
list.add("111");
list.add("222");
list.add("333");
list.add("444");
list.add("555");
 
list.add(0, "666");  // 在索引0处插入 
 
System.out.println(list);  // 输出:[666, 111, 222, 333, 444, 555]

注意:
如果插入时索引越界,会抛出 IndexOutOfBoundsException。
集合对象直接打印不会出现内存地址,而是显示元素内容(底层重写了 toString)。

ArrayList常用成员方法(增删改查)

ArrayList 提供了丰富的增删改查方法,常用如下:

方法说明
boolean add(E e)尾部添加元素
void add(int index, E e)指定位置插入元素
boolean remove(Object o)删除指定元素,返回是否成功
E remove(int index)删除指定索引元素,返回被删除的元素
E set(int index, E e)修改指定索引元素,返回被修改前的元素
E get(int index)获取指定索引元素
int size()返回集合中元素个数

演示代码(整合删除、修改、查询):

import java.util.ArrayList;
 
public class Demo2ArrayList {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        list.add("abc");
        list.add("111");
        list.add("222");
        list.add("333");
        list.add("444");
        list.add("555");
 
        // 删除:根据元素删除
        boolean b1 = list.remove("abc");   // 删除成功返回true
        boolean b2 = list.remove("zzz");   // 不存在返回false
        System.out.println(b1);            // true
        System.out.println(b2);            // false
 
        // 删除:根据索引删除 
        String removed = list.remove(0);   // 删除索引0的元素,返回被删除的元素
        System.out.println(removed);       // 111 
 
        // 修改
        String old = list.set(0, "666");   // 将索引0元素改为"666",返回旧值
        System.out.println(old);           // 222 
 
        // 查询
        String s1 = list.get(0);           // 获取索引0元素
        String s2 = list.get(1);
        System.out.println(s1);            // 666 
        System.out.println(s2);            // 333
 
        // 获取集合大小
        int size = list.size();
        System.out.println(size);          // 4
 
        System.out.println(list);          // [666, 333, 444, 555]
    }
}

提示:除了 get 和 size 外,删除、修改方法的返回值通常不需要接收,直接调用即可。

集合存储字符串并遍历

遍历集合的关键是结合 size() 和 get(int index) 方法,格式与遍历数组非常相似。

需求:创建存储字符串的集合,存入3个字符串,遍历打印。

代码实现:

import java.util.ArrayList;
 
public class Test1 {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        list.add("张三");
        list.add("李四");
        list.add("王五");
 
        // 通用遍历格式 
        for (int i = 0; i < list.size(); i++) {
            String s = list.get(i);
            System.out.println(s);
        }
    }
}

遍历快捷键:在IDEA中输入 list.fori 回车,可快速生成循环骨架。

集合存储学生对象并遍历

当集合存储自定义对象时,遍历取出的是对象引用,需要调用对象方法才能获取具体信息。

需求:创建存储 Student 对象的集合,存入3个学生,遍历打印学生姓名和年龄。

代码实现:

import com.wb.domain.Student;
import java.util.ArrayList;
 
public class Test2 {
    public static void main(String[] args) {
        ArrayList<Student> list = new ArrayList<>();
 
        Student stu1 = new Student("张三1", 23);
        Student stu2 = new Student("张三2", 23);
        Student stu3 = new Student("张三3", 23);
 
        list.add(stu1);
        list.add(stu2);
        list.add(stu3);
 
        for (int i = 0; i < list.size(); i++) {
            Student stu = list.get(i);
            System.out.println(stu.getName() + "..." + stu.getAge());
        }
    }
}

注意:如果直接打印 stu,输出的是对象地址,必须通过 getName() 等方法获取属性值。

键盘录入学生信息到集合

将之前手动创建的学生数据改为从键盘录入,使程序更灵活。

需求:键盘录入3个学生的姓名和年龄,封装成对象存入集合,遍历集合输出信息。

关键点:
使用 Scanner 接收键盘输入
为避免 nextLine() 与 nextInt() 混用导致的问题,这里使用 next() 接收字符串
将录入及封装逻辑抽取为方法 getStudent(),提高复用性

代码实现:

import com.wb.domain.Student;
import java.util.ArrayList;
import java.util.Scanner;
 
public class Test3 {
    public static void main(String[] args) {
        ArrayList<Student> list = new ArrayList<>();
 
        Student stu1 = getStudent();
        Student stu2 = getStudent();
        Student stu3 = getStudent();
 
        list.add(stu1);
        list.add(stu2);
        list.add(stu3);
 
        for (int i = 0; i < list.size(); i++) {
            Student stu = list.get(i);
            System.out.println(stu.getName() + "..." + stu.getAge());
        }
    }
 
    public static Student getStudent() {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入学生姓名:");
        String name = sc.next();
        System.out.println("请输入学生年龄:");
        int age = sc.nextInt();
        return new Student(name, age);
    }
}

运行示例:

请输入学生姓名:
张三
请输入学生年龄:
23
请输入学生姓名:
李四
请输入学生年龄:
24
请输入学生姓名:
王五
请输入学生年龄:
25
张三...23
李四...24
王五...25

集合删除元素的注意事项

删除集合中的元素时,如果使用 remove(Object o) 方法,它只会删除第一个匹配的元素。
若要删除所有匹配的元素,必须遍历集合,并采用索引删除的方式,同时注意索引回退问题。

需求:删除集合中所有 “test” 字符串,集合初始元素为 [“test”, “张三”, “李四”, “test”, “test”]

错误做法:直接 list.remove("test") 只删除了第一个 “test”

正确做法:遍历时用索引删除,并在删除后执行 i–,防止漏掉连续的元素

删除过程图解
假设集合变化如下:

是

否

是

否

开始遍历 i=0

list.get i 是否为test?

list.remove i

i--

i++

i < list.size?

结束

为什么需要 i–?
删除当前元素后,后面所有元素会向前移动一位,如果直接 i++,就会跳过原本下一个位置的元素。
先 i-- 再 i++(循环自带 i++),相当于指针原地不动,重新检查当前位置的新元素,确保不遗漏。

代码实现:

import java.util.ArrayList;
 
public class Test4 {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        list.add("test");
        list.add("张三");
        list.add("李四");
        list.add("test");
        list.add("test");
 
        for (int i = 0; i < list.size(); i++) {
            String s = list.get(i);
            // 常量.equals(变量) 可避免空指针异常
            if ("test".equals(s)) {
                list.remove(i);
                i--;  // 关键:回退索引
            }
        }
        System.out.println(list);  // 输出:[张三, 李四]
    }
}

最佳实践:字符串比较时,建议用常量调用 equals,如 "test".equals(s),避免 null 引发空指针异常。

集合数据筛选 —— 方法返回新集合

本节演示如何编写一个方法,接收集合并根据条件筛选出部分元素返回新集合

需求:定义一个方法,接收一个 ArrayList<Student> 集合,将年龄低于18的学生对象筛选出来,存入新集合并返回

实现步骤

  1. 定义方法 getList,参数为 ArrayList<Student>,返回值也为 ArrayList<Student>
  2. 方法内部创建新集合 newList
  3. 遍历原集合,获取每个学生对象的年龄
  4. 判断年龄是否小于18,若满足则添加到 newList
  5. 返回新集合

代码实现:

import com.wb.domain.Student;
import java.util.ArrayList;
 
public class Test5 {
    public static void main(String[] args) {
        ArrayList<Student> list = new ArrayList<>();
        list.add(new Student("张三1", 10));
        list.add(new Student("张三2", 10));
        list.add(new Student("张三3", 20));
 
        ArrayList<Student> newList = getList(list);
 
        for (int i = 0; i < newList.size(); i++) {
            Student stu = newList.get(i);
            System.out.println(stu.getName() + "..." + stu.getAge());
        }
    }
 
    public static ArrayList<Student> getList(ArrayList<Student> list) {
        ArrayList<Student> newList = new ArrayList<>();
        for (int i = 0; i < list.size(); i++) {
            Student stu = list.get(i);
            if (stu.getAge() < 18) {
                newList.add(stu);
            }
        }
        return newList;
    }
}

运行结果:

张三1...10 
张三2...10 

要点:
方法的形参和返回值可以是集合类型,调用时传递对应集合对象即可
这种“筛选并返回新集合”的模式在实际开发中非常常见,它为后续学习流式操作打下了基础

总结

通过本文,我们从对象数组入手,体会了数组的局限性,进而引入了 ArrayList 集合
学习了集合的构造、增删改查、遍历、键盘录入、删除注意事项以及筛选操作
掌握了这些基础,你就已经能够利用集合解决许多动态数据存储的问题了
在后续的学习中,还会接触到更多高级的集合类,但万变不离其宗,理解好 ArrayList 是第一步

Python海康摄像头SDK二次开发 摘要:为解决海康威视摄像头RTSP拉流延迟严重的问题,本文提出改用海康私有SDK直接取流的方案。通过下载海康设备网络SDK并调用其Python接口,实现了低延迟的视频流获取。文中详细介绍了SDK配置流程,并提供了优化版的Python代码示例,重点解决回调函数处理、队列缓冲和CPU占用等问题。测试结果表明,该方案显著降低了延迟,同时保持了较高的帧率(30FPS以上)和较低的CPU占用率(约2%)。相较于传统OpenCV+FFmpeg的RTSP方案,海康SDK直接取流在实时性方面具有明显优势。 阅读详情

相关推荐

Avellaneda & Stoikov’s market-making strategy 工程化处理

前2篇文章详细介绍了AS存货模型的做市策略,这次对于这些公式里面一些希腊字母的取值是如何计算的,如何做工程化并应用到生产环境中做一些说明。这个里面有一些重要参数:很直观,可以直接取值的有:s = current market mid price (中间价,也就是【最佳卖价+最佳买价】/2)q = quantity of assets in inventory of base asset (也就是买入多少价值的股票数量)

weixin_42480337的博客 7070

Java集合ArrayList和LinkedList区别

Java的集合类主要由两个接口派生而出:Collection和Map,Collection和Map是Java集合框架的根接口。 Java集合大致可以分为Set、List、Queue和Map四种体系,其中Set代表无序、不可重复的集合;List代表有序、重复的集合;而Map则代表具有映射关系的集合;Queue体系集合,代表一种队列集合实现。 jdk1.4以前没有Queue集合,一般用Linked...

怀素的专栏 1万+

【ubuntu】如何搭建AFTR+B4环境

为何要使用ipv6 目前ipv4地址已经不够用了,而IPv6采用128位地址长度,几乎可以不受限制地提供地址。而且ipv6具有更高的安全性。 主流的ipv6方案 1.双栈方案 :所有设备同时支持IPv4/IPv6协议栈,核心理念在于其传送网同时支持IPv4和IPv6 2.DS-Lite方案 :IPv4‐in‐IPv6 隧道和 NAT 这两个基本技术,同时支持IPV4与IPV6,对于ipv4用户,可以通过ipv6隧道与ipv4业务平台实现通信;针对ipv6用户,可直接通过ipv6网络通信。 3.6RD方案 :

weixin_43863426的博客 2725

【JAVA基础】ArrayList

ArrayList是集合中的一种,它支持索引。:在个数不能确定,且要进行增删数据操作的时候,数组是不太合适的。集合的大小不固定,启动后可以动态变化,类型也可以选择不固定。集合非常适合做元素个数不确定,且要进行增删操作的业务场景。集合还提供了许多丰富、好用的功能,而数组的功能很单一。删除指定索引处的元素,返回被删除的元素。修改指定索引处的元素,返回被修改的元素。ArrayList集合添加元素的方法。在此集合中的指定位置插入指定的元素。删除指定的元素,返回删除是否成功。将指定的元素追加到此集合的末尾。

Javascript_tsj的博客 7833

Bresenham画圆算法在嵌入式屏幕(如ILI9806G)上的实战:从C代码到单片机显示

本文详细介绍了Bresenham画圆算法在嵌入式屏幕(如ILI9806G)上的高效实现与优化方法。通过整数化改造和针对STM32等微控制器的特殊优化,显著提升了图形显示性能,适用于资源受限的嵌入式系统开发。文章还分享了实心圆与空心圆的实现策略及实战经验。

weixin_33712987的博客 392

告别OpenAI API调用:手把手在本地CPU/GPU上部署fast-whisper中文语音识别模型

本文详细指导如何在本地CPU/GPU上部署fast-whisper中文语音识别模型,摆脱对OpenAI API的依赖。从环境准备、模型获取与优化,到CPU/GPU环境的具体部署步骤和性能优化技巧,全面覆盖本地化语音识别的实现方案,帮助开发者提升效率并保障数据隐私。

weixin_29988907的博客 309

Java的ArrayList集合

ArrayList是一个灵活且易于使用的动态数组实现,适合存储和操作可变长度的对象集合。它提供了丰富的方法和良好的性能,但在需要频繁插入和删除元素时,可以考虑使用LinkedList,因为其在中间位置插入和删除元素时性能更佳。

2302_81034736的博客 2771

SST专题(2-5)MMC-SST 输入级的环流抑制

本文研究了模块化多电平换流器(MMC)的数学模型及其环流抑制控制方法。首先建立了MMC等效电路模型,推导了桥臂电流方程和虚拟电动势表达式,提出通过控制桥臂电压修正量来调节内部电流而不影响外部特性。针对MMC特有的二倍频负序环流问题,设计了基于负序旋转坐标变换的环流抑制控制器(CCSC),将时变环流转换为直流量进行控制。通过比例-积分调节和电压前馈补偿,生成内部不平衡压降参考值,最终形成包含功率控制和环流抑制的整体控制结构。仿真结果表明该方法能有效抑制内部环流,同时保持系统稳定运行。

嵌入式老牛的博客 539

Java集合基础梳理(集合体系+ArrayList)

对于数组来说,它是动态扩容的, 当元素存放超过数组的阈值机会进行扩容,但是当元素从数组中删除之后,数组不会缩容. 如果一个100大小的数组,那么只存放一个元素,序列化的时候需要序列化99个null值,为了避免Java默认的序列化机制的造成的空间浪费,将数组使用transient来修饰,的空间浪费主要体现在在 list 列表的结尾会预留一定的容量空间,而 LinkedList 的空间花费则体现在它的每一个元素都需要消耗比 ArrayList 更多的空间(因为要存放直接后继和直接前驱以及数据)。

欢迎来到我的博客,在这里我会用我的方式来讲解知识,请大家多多关照 1560

药物相关 PK(药代动力) 、PD(药效)指标知识

PK代表药物的药代动力学,指的是药物在体内的吸收、分布、代谢和排泄等过程,包括药物的药代动力学参数如Cmax(最大血药浓度)、Tmax(最大血药浓度出现的时间)、t1/2(半衰期)、AUC(药物曲线下面积)等。PD代表药物的药效学,指的是药物与生物体相互作用所产生的药理效应,包括药物的药效学参数如EC50(半数最大有效浓度)、ED50(半数最大效应剂量)、Emax(最大效应)等。PD(Pharmacodynamics)则研究药物的药效学特性,如药物的作用机制、效力、最大疗效、最小毒性等。

weixin_42357472的博客 2万+

使用 MATLAB/Simulink + Simscape Electrical 来构建一个CCHP微电网与新能源协同运行的模型

随着能源需求的增长和对环境保护要求的提高,冷热电联供(Combined Cooling, Heating and Power, CCHP)系统作为一种高效的分布式能源解决方案,越来越受到关注。CCHP系统通过利用一次能源同时产生电力、制冷和供热,实现了能源的梯级利用,提高了能源使用效率。结合太阳能、风能等可再生能源,可以进一步增强系统的灵活性和环保性。本文将详细介绍如何使用来构建一个CCHP微电网与新能源协同运行的模型,并通过仿真分析其性能表现。本文介绍了如何使用构建一个。

xiaoheshang_123的博客 141

【Java基础】Java 的ArrayList集合

ArrayList是基于的List实现类,其底层数据结构是 Object[] elementData。它通过动态扩容机制(自动扩展数组长度)实现灵活的存储需求,但牺牲了线程安全性。ArrayListListVectorArrayList的底层基于。

小李同学的博客 2298

NXOpenC#-通用NX对象操作Tag,Handle,TaggedObject介绍

NXOpenC#-通用NX对象操作Tag,Handle,TaggedObject介绍

阿飞2018 1187

Java集合之ArrayList

在 Java 编程中,我们经常需要存储一组数据。除了数组,Java 提供了一个更灵活、更强大的工具 ——。可以把集合想象成“存放数据的容器”,Java 给出了很多不同类型的容器,每种容器适合不同的使用场景。在这些集合中,有一个叫而就是 List 的一个具体实现类。它底层用动态数组来存数据,既可以像数组一样快速访问,也可以随时增加或删除元素,非常灵活。

2501_90434822的博客 726

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

JAVA集合之list集合中的ArrayList集合

在集合类中,List是最基础的一种集合:它是一种有序列表。ListList内部按照放入元素的先后顺序存放,每个元素都可以通过索引确定自己的位置,List的索引和数组一样,从0开始。有序性(Ordered)List中的元素按照插入顺序存储,可以通过索引(index)访问。获取第一个元素。允许重复元素(Duplicates Allowed)。可存储null值大多数List实现(如ArrayListLinkedList)允许存储null值。动态扩容List的大小可以动态增长,不像数组需要固定长度。

2301_82080021的博客 1054

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

JAVA基础-数组和集合

数组和集合基础知识

ilikOct的博客 1376

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

【Java从入门到放弃 之 ArrayList】

概述定义:ArrayList 是一个可以动态增长和缩小的数组实现,允许存储任意数量的对象。特点:线程不安全:ArrayList 不是同步的,如果多个线程同时修改同一个 ArrayList 实例,则必须显式地进行同步。允许重复元素:与 Set 不同,ArrayList 允许存储重复的元素。允许空值:支持存储 null 值,甚至可以存储多个 null。内部工作原理ArrayList 内部使用一个对象数组来存储元素。

Snow的博客 1478

【Java】List集合之ArrayList

​ List集合下共有ArrayList、LinkedList、Vector三种实现方法,但是ArrayList是 java 集合框架中比较常用的数据结构。继承自 AbstractList,实现了 List 接口。底层基于数组实现容量大小动态变化。允许 null 的存在。同时还实现了 RandomAccess、Cloneable、Serializable 接口,所以ArrayList 是支持快速访问、复制、序列化的。 每一个ArrayList都有一个初始化的容量(10),该容量代表了数组的大小,随着容器

weixin_53972936的博客 3208

Java学习笔记:ArrayList集合

超级详细的Java整理学习笔记:ArrayList集合、Java和python数据结构的区别,以及Java如何实现处理多样的数据组!!!

Li__Daxia的博客 1277

Java集合基础

集合是一种容器,用来装数据的,类似于数组。但是我们有数组,为啥还学习集合?数组定义完成并启动后,长度就固定了。集合大小可变,开发中用的更多。

W_chuanqi的博客 1119

【Java 】集合篇-ArrayList-7000 字内容带你从入门到掌握(含源码)

AraryList 是 Java 集合框架中的一个动态数组实现类,位于 java.util 包下。它提供了一个可变变小的数组。可以动态的增加或者删除元素。动态数组支持随机访问线程不安全扩容机制总的来说,arrayList 适合需要频繁随机访问以及遍历元素的场景。我们简单记忆:ArrayList 实现了 List 接口(List 接口实现了 Collection 接口)。ArrayList 是线程不安全的ArrayList 是可以存放 null 元素的。

2401_82656016的博客 1095

Java中ArrayList集合的构造方法

关于ArrayList的构造方法: 1.ArrayList实现了List接口,底层是一个Object类型的数组Object[]。 2.默认无参数构造时数组长度为10,有参数构造时初始化指定长度的数组。 ArrayList list1 = new ArrayList(); // 初始化长度为0,当添加第一个元素的时候容量默认为10 ArrayList list2 = new ArrayList(20); // 指定初始化长度为20 注意:当列表容量满了时,继续添加元素时,数组会自动扩容,自动扩容到:旧容量

pipizhen_的博客 3289

java集合之ArrayList

随机访问速度快,内存连续性好。

guanxin0206的博客 1129

【Java集合】ArrayList从入门到精通:原理、源码、扩容机制一文讲透

简单:基于数组,操作直观高效:随机访问O(1),尾部插入均摊O(1)灵活:自动扩容,动态调整安全:Fail-Fast机制,及时发现并发问题理解ArrayList的底层原理,不仅能帮助我们写出更高性能的代码,还能为学习其他集合类打下坚实的基础。关注我,获取更多Java核心技术文章。参考阅读JDK 8源码:java.util.ArrayList《Effective Java》第三版 - 第50条:优先考虑泛型Java官方文档:ArrayList API文档。

2401_83440791的博客 701

揭秘ArrayList:深入探索Java的动态数组艺术

ArrayList作为Java集合框架中的核心类之一,它以其动态扩展、基于索引的快速访问和易用的API赢得了开发者的青睐。然而,在使用ArrayList时,我们也需要注意其潜在的性能开销、线程安全性以及内存占用等问题。虽然ArrayList在大多数情况下能够满足需求,但在处理大量数据、频繁插入删除操作或者多线程环境下,我们需要谨慎评估其是否是最优选择。总之,ArrayList是一个功能强大的工具,但在使用时需根据具体场景进行权衡和选择。

m0_51176516的博客 1318

Java集合框架之ArrayList深度解析:动态数组的实现艺术

本文全面剖析了Java集合框架中的ArrayList类,主要介绍了其实现原理和核心功能。ArrayList是基于动态数组实现的List接口,具有动态扩容、快速随机访问等特性。文章详细讲解了其底层数据结构(Object数组)、三种构造方法(无参、指定容量、从集合构造)以及核心操作(添加、删除、获取元素)。重点分析了1.5倍扩容机制和元素移动过程,并比较了不同遍历方式的实现原理。ArrayList作为非线程安全集合,在多线程环境下需要外部同步,是Java开发中最常用的动态数组实现。

weixin_51786043的博客 795
上一篇: Java基础快速入门:StringBuilder详解
下一篇: Java基础快速入门:基于ArrayList从零打造学生管理系统
Wang's Blog
博客等级 码龄12年 7433粉丝 2421原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wang's Blog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值