JAVA中ArrayList的解析

gogogo出发喽!让我们来认识一下它吧

什么是ArrayList

Java 中的 ArrayList 是 Java 集合框架中的重要类,用于实现动态数组

  • 动态数组 :可按需自动扩展或缩小,无需手动管理数组大小。比如不断向 ArrayList 添加元素时,它会自动增加容量来存储新元素。(当添加元素使当前容量不足时,通常会增加当前容量的一半来扩容。例如原容量为 10,添加第 11 个元素时会扩容到 15)
  • 元素存储多样:能存储包括基本数据类型(实际存储的是对应的包装类)和对象在内的各种数据类型。
  • 索引访问:和普通数组一样,可通过索引快速访问元素,时间复杂度为 O (1) 。
  • 允许重复元素:集合中能存在多个相同元素。
  • 泛型支持 :使用泛型可在编译时指定存储的元素类型,提供类型安全性,避免类型转换异常。如ArrayList<String> 只能存储字符串类型元素 。
  • 非线程安全:在多线程环境中,若多个线程同时读写,需额外同步措施保证线程安全,否则可能出现数据不一致问题 。

ArrayList的创建

1.使用默认构造函数创建一个空ArrayList

复制代码
    public static void main1(String[] args) {
        ArrayList<String> i=new ArrayList<>();//创建空的ArrayList
        i.add("i'm");//add来添加元素
        i.add("your");
        i.add("father");
        System.out.println(i);

    }
}

运行结果:i'm, your, father

2.使用有初始容量的构造函数创建ArrayList

复制代码
public static void main(String[] args) {
    ArrayList<Integer> k=new ArrayList<>(5);//默认容量为5
    k.add(1);
    k.add(2);
    k.add(3);
    k.add(4);
    k.add(5);
    k.add(6);//超出容量ArrayList自动扩容
    k.add(6);//自动扩容
    System.out.println(k);
}

3. 在原始ArrayList上再创建新的ArrayList

复制代码
public static void main(String[] args) {
    List<String> U=new ArrayList<>();
    U.add("VIVO");
    U.add("OPPO");
    U.add("IQOO");
    U.add("ONEPLUS");
    ArrayList<String> O=new ArrayList<>(U);
    O.add("HUAWEI");//后加
    System.out.println(O);

运行结果:VIVO, OPPO, IQOO, ONEPLUS, HUAWEI

4.指定位置插入add(下标,元素)

复制代码
  public static void main(String[] args) {
        ArrayList<String> i=new ArrayList<>();
        i.add("i'm");
        i.add("your");
        i.add("father");
        i.add(3,"的儿子");//在3下标位置插入
        System.out.println(i);

    }
}

运行结果:i'm, your, father, 的儿子

5. 添加全部 addAll()

复制代码
public class TEXT {
    public static void main(String[] args) {
        List<String> i=new ArrayList<>();
        i.add("1");
        i.add("2");
        i.add("3");
        i.add("4");
        List<String> u= Arrays.asList("5","6");
        i.addAll(u);
        System.out.println(i);
    }

运行结果:1, 2, 3, 4, 5, 6

Arrays.asList() 创建的列表是固定大小的,意味着你不能使用 add()remove() 这类方法来改变列表的大小,否则会抛出 UnsupportedOperationException 异常。

6.ArrayList删除元素 remove(下标)

复制代码
public static void main(String[] args) {
    List<String> i=new ArrayList<>();
    i.add("1");
    i.add("2");
    i.add("3");
    i.add("4");
   i.remove(3);//删除3下标
    System.out.println(i);
}

运行结果:1, 2, 3

remove(元素)

复制代码
public static void main(String[] args) {
    List<String> i=new ArrayList<>();
    i.add("1");
    i.add("2");
   i.add("3");
i.add("3");
    i.add("4");
   i.remove("3");//删除第一个元素"3"
    System.out.println(i);
}

运行结果:1, 2, 3, 4

7.获取指定下标的元素 get(下标)

复制代码
public static void main(String[] args) {
    List<String> i=new ArrayList<>();
    i.add("1");
    i.add("2");
    i.add("3");
    i.add("3");
    i.add("4");
   i.remove("3");
    System.out.println(i);
    String p=i.get(2);//获取指定下标的元素
    System.out.println(p);
}

运行结果:1, 2, 3, 4
3

8.将指定下标的元素进行替换 set(下标,替换元素)

复制代码
public static void main(String[] args) {
    List<String> i=new ArrayList<>();
    i.add("1");
    i.add("2");
    i.add("3");
    i.add("4");
  i.set(2,"7");//将2下标元素替换为"7"
    System.out.println(i);

}

运行结果:1, 2, 7, 4

9.清空clear()

复制代码
public static void main(String[] args) {
    List<String> i=new ArrayList<>();
    i.add("1");
    i.add("2");
    i.add("3");
    i.add("4");
  i.set(2,"7");
    System.out.println(i);
    i.clear();
    System.out.println(i);

}

运行结果:1, 2, 7, 4

10.判断是否包含元素 Boolean contains(元素)

复制代码
public static void main(String[] args) {
    List<String> i=new ArrayList<>();
    i.add("1");
    i.add("2");
    i.add("3");
    i.add("4");
  i.set(2,"7");
 Boolean y=i.contains("7");
    System.out.println(y);//返回为true false
}

运行结果:true

11.返回元素所在的下标int indexOf(元素)

复制代码
public static void main(String[] args) {
    List<String> i=new ArrayList<>();
    i.add("1");
    i.add("2");
    i.add("3");
    i.add("4");
  i.set(2,"7");
 int index= i.indexOf("7");
    System.out.println(index);
}

运行结果:2

12.倒着查找返回第一个被找到的元素的下标int lastIndexOf(元素)

复制代码
public static void main(String[] args) {
    List<String> i=new ArrayList<>();
    i.add("7");
    i.add("2");
    i.add("3");
    i.add("5");
  i.set(2,"7");//这里为倒数第一个下标为2
 int index= i.lastIndexOf("7");
    System.out.println(index);
}

运行结果:2

13.截取部分list:list<E>sublist(起始下标,结束下标)注:这里为左闭右开

复制代码
public static void main(String[] args) {
    List<String> i=new ArrayList<>();
    i.add("7");//0
    i.add("2");//1
    i.add("3");//2
    i.add("5");//3
  i.set(2,"7");
 List<String> b=i.subList(2,3);//左闭右开这里就只有2下标元素
    System.out.println(b);
}

运行结果:7

ArrayList遍历

1.for循环遍历

复制代码
    public static void main(String[] args) {
        List<String> U = new ArrayList<>();
        U.add("VIVO");
        U.add("OPPO");
        U.add("IQOO");
        U.add("ONEPLUS");
        ArrayList<String> O = new ArrayList<>(U);
        O.add("HUAWEI");//后加
        System.out.println(O);
        for (int i = 0; i < O.size(); i++) {
            System.out.println(O.get(i));//逐条输出
        }
    }
}

运行结果:VIVO, OPPO, IQOO, ONEPLUS, HUAWEI
VIVO
OPPO
IQOO
ONEPLUS
HUAWEI

2.增强for循环输出

复制代码
    public static void main(String[] args) {
        List<String> U = new ArrayList<>();
        U.add("VIVO");
        U.add("OPPO");
        U.add("IQOO");
        U.add("ONEPLUS");
        ArrayList<String> O = new ArrayList<>(U);
        O.add("HUAWEI");//后加
        System.out.println(O);
     
        for (String e : O) {
            System.out.println(e);//增强for循环打印
        }
    }
}

运行结果:VIVO, OPPO, IQOO, ONEPLUS, HUAWEI
VIVO
OPPO
IQOO
ONEPLUS
HUAWEI

3.使用迭代器

复制代码
    public static void main(String[] args) {
        List<String> U = new ArrayList<>();
        U.add("VIVO");
        U.add("OPPO");
        U.add("IQOO");
        U.add("ONEPLUS");
        ArrayList<String> O = new ArrayList<>(U);
        O.add("HUAWEI");//后加
        System.out.println(O);
        Iterator<String> k = O.iterator();
        while (k.hasNext()) {
            String u = k.next();
            System.out.println(u);//迭代器打印
        }
    }

}

运行结果:VIVO, OPPO, IQOO, ONEPLUS, HUAWEI
VIVO
OPPO
IQOO
ONEPLUS
HUAWEI

好了相信看到这里你一定有很多收获吧,好兄弟我们下期再见~~~

相关推荐
如竟没有火炬1 天前
最大矩阵——单调栈
数据结构·python·线性代数·算法·leetcode·矩阵
阳区欠1 天前
【LangChain】LLM基础介绍
开发语言·python·langchain
Jinkxs1 天前
Java 跨域14-Java 与区块链(Hyperledger)集成
java·开发语言·区块链
8Qi81 天前
LeetCode 1143 & 718:最长公共子序列 / 最长重复子数组
算法·leetcode·职场和发展·动态规划
绿算技术1 天前
万卡推理集群存储选型分析:从核心架构到应用视角
大数据·科技·算法·架构
晨曦中的暮雨1 天前
Golang速通(Javaer版)
java·开发语言·后端·golang
七老板的blog1 天前
当 Spring StateMachine 遇见大模型:构建工业级 AI 写作流水线
java·人工智能·spring
小小编程路1 天前
Python 还有容器类型互转、进制转换、字符编码转换
开发语言·windows·python
想吃火锅10051 天前
【leetcode】1.两数之和js版
javascript·算法·leetcode