Java 学习38:ArrayList 类

一、概述

ArrayList 类是一个可以动态修改的数组,与普通数组的区别就是它是没有固定大小的限制,我们可以添加或删除元素。

ArrayList 继承了 AbstractList ,并实现了 List 接口。

二、ArrayList 集合的特点

​1. 长度可变,自动扩容。

  1. 添加数据的时候不需要考虑索引,默认将数据添加到末尾。

  2. 只能存储引用数据类型。在存储基本数据类型时,需要变成其对应的包装类。

三、扩容机制

当元素数量超过当前容量时,ArrayList 会自动创建更大的新数组,将旧元素复制过去。

简单说:ArrayList = 数组 + 自动扩容机制。

ArrayList 自动扩容的步骤如下:

  1. 计算新容量:默认扩容为原容量的 1.5 倍(公式:newCapacity = oldCapacity + (oldCapacity >> 1),右移 1 位等价于除以 2)。

  2. 创建新数组(长度为新容量)。

  3. 将旧数组的元素复制到新数组(System.arraycopy() 方法)。

  4. 用新数组替换旧数组(elementData = newElementData)。

扩容过程:

初始容量为 10,添加第 11 个元素时,扩容为 10 + 10/2 = 15。

当前容量为 15,添加第 16 个元素时,扩容为 15 + 15/2 = 22。

四、创建 ArrayList 对象

要使用 ArrayList,首先需要导入 java.util.ArrayList 包。创建 ArrayList 对象的语法如下

import java.util.ArrayList; // 导入 ArrayList 类

// 方法1:无参构造方法

ArrayList<E> objectName =new ArrayList<>(); // 默认初始容量为 10

// 方法2:指定初始容量的构造方法(推荐!避免频繁扩容)

ArrayList<E> objectName = new ArrayList<>( int initialCapacity ); // 指定初始容量,比如 50

这里的 E 是泛型,表示 ArrayList 将持有的对象类型,必须是引用类型。

五、ArrayList 类常用方法

方法名 说明
public boolean add( E element ) 将指定的元素追加到此集合的末尾
public boolean remove( E element ) 删除指定元素,返回值表示是否删除成功
public E remove ( int index ) 删除指定索引处的元素,返回被删除的元素
public E set( int index, E element ) 修改指定索引处的元素,返回被修改的元素
public E get( int index ) 返回指定索引处的元素
public int size() 返回集合中的元素的个数

例1:添加、访问、修改和删除元素。

java 复制代码
import java.util.ArrayList;

public class ArrayListTest {
    public static void main(String[] args) {
        ArrayList<String> sites = new ArrayList<String>();
        sites.add("Google");
        sites.add("baidu");
        sites.add("Taobao");
        sites.add("Weibo");

        // 输出
        System.out.println(sites);

        // 访问元素
        System.out.println(sites.get(1)); // 输出 baidu

        // 修改元素
        sites.set(2, "Wiki");

        // 删除元素
        sites.remove(3);

        // for循环遍历ArrayList
        for (int i = 0; i < sites.size(); i++) {
            System.out.println(sites.get(i));
        }

        // for-each循环遍历ArrayList
        for (String i : sites) {
            System.out.println(i);
        }
    }
}

例2:在集合存入三个用户对象。用户属性包括 id,username,password。定义一个方法,根据 id 查找对应的用户信息。

java 复制代码
import java.util.ArrayList;

class User {
    private String id;
    private String name;
    private String password;

    public User(String id, String name, String password) {
        this.id = id;
        this.name = name;
        this.password = password;
    }

    public String getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public String getPassword() {
        return password;
    }
}

public class ArrayListTest {
    public static void main(String[] args) {
        //1.创建集合对象
        ArrayList<User> list = new ArrayList<>();

        //2.创建用户对象
        User u1 = new User("001", "zhangsan", "123456");
        User u2 = new User("002", "lisi", "1234");
        User u3 = new User("003", "wangwu", "1234qwer");

        //3.把用户对象添加到集合当中
        list.add(u1);
        list.add(u2);
        list.add(u3);

        //4.调用方法,通过id获取对应的索引
        int index = getIndex(list, "001");
        User u = list.get(index);
        System.out.println(u.getId() + "," + u.getName() + ","+ u.getPassword());

    }


    //根据id查找对应的学生信息
    public static int getIndex(ArrayList<User> list, String id) {
        //遍历集合得到每一个元素
        for (int i = 0; i < list.size(); i++) {
            User u = list.get(i);
            String uid = u.getId();
            if(uid.equals(id)){
                return i;
            }
        }
        //集合里面所有的元素都比较完了,断定id是不存在的
        return -1;
    }
}
相关推荐
q***2512 小时前
Spring Boot 集成 Kettle
java·spring boot·后端
筱顾大牛2 小时前
IDEA使用Gitee来创建远程仓库
java·gitee·intellij-idea
懂得节能嘛.2 小时前
【SDK开发实践】从Java编码到阿里云制品仓库部署
java·阿里云·maven
空空kkk3 小时前
SpringMVC——异常
java·前端·javascript
重整旗鼓~3 小时前
1.大模型使用
java·语言模型·langchain
sino爱学习3 小时前
FastUtil 高性能集合最佳实践:让你的 Java 程序真正“快”起来
java·后端
.豆鲨包3 小时前
【Android】 View事件分发机制源码分析
android·java
北京地铁1号线3 小时前
数据结构:堆
java·数据结构·算法
百***86464 小时前
Spring Boot应用关闭分析
java·spring boot·后端