【JAVA集合篇 - ArrayList】你真的了解ArrayList吗?

简介: 【JAVA集合篇 - ArrayList】你真的了解ArrayList吗?

前言

  • 1.用了这么多次Arraylist,真的理解ArrayList吗?
    ArrayList 类是一个可以动态修改的数组,与普通数组的区别就是它是没有固定大小的限制,我们可以添加或删除元素。ArrayList 继承了 AbstractList ,并实现了 List 接口。
  • 2.继承图解(来源于idea的Diagrams)
public class ArrayList<E> extends AbstractList<E>
        implements List<E>, RandomAccess, Cloneable, java.io.Serializable{}

  • ArrayList 类位于 java.util 包中,使用前需要引入它
import java.util.ArrayList; // 引入 ArrayList 类
ArrayList<E> listName=new ArrayList<>();  // 初始化

E: 泛型数据类型,用于设置 listName的数据类型,只能为引用数据类型。

listName: 对象名。

ArrayList 添加、访问、修改、删除元素,计算大小

import java.util.ArrayList;
public class Test {
    public static void main(String[] args) {
        ArrayList<String> list= new ArrayList<String>();
        list.add("zyh");
        list.add("zhuyonghao");
        list.add("朱勇豪");
        list.add("阿豪");
        System.out.println(list);
        System.out.println(list.get(1));  // 访问第二个元素,索引从零开始
        list.set(2, "帅哥"); //修改
        System.out.println(list.get(2));
        list.remove(3); // 删除第四个元素
        System.out.println(list);
        System.out.println(list.size());
    }
}

结果

[zyh, zhuyonghao, 朱勇豪, 阿豪]
zhuyonghao
帅哥
[zyh, zhuyonghao, 帅哥]
3

ArrayList 迭代数组列表

使用 for、 for-each 来迭代数组列表中的元素

public static void main(String[] args) {
        ArrayList<String> list= new ArrayList<String>();
        list.add("zyh");
        list.add("zhuyonghao");
        list.add("朱勇豪");
        list.add("阿豪");
        System.out.println(list);
        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i));
        }
        System.out.println("--------------");
        for (String s : list) {
            System.out.println(s);
        }
    }
//结果
[zyh, zhuyonghao, 朱勇豪, 阿豪]
zyh
zhuyonghao
朱勇豪
阿豪
--------------
zyh
zhuyonghao
朱勇豪
阿豪

ArrayList E为对象,基本数据类型使用包装类

只能为引用数据类型

所以要用到基本数据类型的包装类

boolean —>Boolean

byte —>Byte

short —>Short

int —>Integer

long —> Long

float —>Float

double —>Double

char —>Character

ArrayList 排序

public static void main(String[] args) {
        ArrayList<String> list= new ArrayList<String>();
        list.add("zyh");
        list.add("zhuyonghao");
        list.add("朱勇豪");
        list.add("阿豪");
        Collections.sort(list); // 字母排序
        System.out.println(list);
    }
//结果
[zhuyonghao, zyh, 朱勇豪, 阿豪]

Java ArrayList 方法

方法  描述
add()     将元素插入到指定位置的 arraylist 中
addAll()    添加集合中的所有元素到 arraylist 中
clear()     删除 arraylist 中的所有元素
clone()     复制一份 arraylist
contains()    判断元素是否在 arraylist
get()     通过索引值获取 arraylist 中的元素
indexOf()   返回 arraylist 中元素的索引值
removeAll()   删除存在于指定集合中的 arraylist 里的所有元素
remove()    删除 arraylist 里的单个元素
size()      返回 arraylist 里元素数量
isEmpty()   判断 arraylist 是否为空
subList()   截取部分 arraylist 的元素
set()     替换 arraylist 中指定索引的元素
sort()      对 arraylist 元素进行排序
toArray()   将 arraylist 转换为数组
toString()    将 arraylist 转换为字符串
ensureCapacity()设置指定容量大小的 arraylist
lastIndexOf() 返回指定元素在 arraylist 中最后一次出现的位置
retainAll() 保留 arraylist 中在指定集合中也存在的那些元素
containsAll() 查看 arraylist 是否包含指定集合中的所有元素
trimToSize()  将 arraylist 中的容量调整为数组中的元素个数
removeRange() 删除 arraylist 中指定索引之间存在的元素
replaceAll()  将给定的操作内容替换掉数组中每一个元素
removeIf()    删除所有满足特定条件的 arraylist 元素
forEach()   遍历 arraylist 中每一个元素并执行特定操作
相关文章
|
2月前
|
算法 Java 数据处理
从HashSet到TreeSet,Java集合框架中的Set接口及其实现类以其“不重复性”要求,彻底改变了处理唯一性数据的方式。
从HashSet到TreeSet,Java集合框架中的Set接口及其实现类以其“不重复性”要求,彻底改变了处理唯一性数据的方式。HashSet基于哈希表实现,提供高效的元素操作;TreeSet则通过红黑树实现元素的自然排序,适合需要有序访问的场景。本文通过示例代码详细介绍了两者的特性和应用场景。
53 6
|
2月前
|
存储 Java
深入探讨了Java集合框架中的HashSet和TreeSet,解析了两者在元素存储上的无序与有序特性。
【10月更文挑战第16天】本文深入探讨了Java集合框架中的HashSet和TreeSet,解析了两者在元素存储上的无序与有序特性。HashSet基于哈希表实现,添加元素时根据哈希值分布,遍历时顺序不可预测;而TreeSet利用红黑树结构,按自然顺序或自定义顺序存储元素,确保遍历时有序输出。文章还提供了示例代码,帮助读者更好地理解这两种集合类型的使用场景和内部机制。
48 3
|
2月前
|
存储 Java 数据处理
Java Set接口凭借其独特的“不重复”特性,在集合框架中占据重要地位
【10月更文挑战第16天】Java Set接口凭借其独特的“不重复”特性,在集合框架中占据重要地位。本文通过快速去重和高效查找两个案例,展示了Set如何简化数据处理流程,提升代码效率。使用HashSet可轻松实现数据去重,而contains方法则提供了快速查找的功能,彰显了Set在处理大量数据时的优势。
38 2
|
15天前
|
存储 缓存 安全
Java 集合江湖:底层数据结构的大揭秘!
小米是一位热爱技术分享的程序员,本文详细解析了Java面试中常见的List、Set、Map的区别。不仅介绍了它们的基本特性和实现类,还深入探讨了各自的使用场景和面试技巧,帮助读者更好地理解和应对相关问题。
36 5
|
1月前
|
Java 索引 容器
Java ArrayList扩容的原理
Java 的 `ArrayList` 是基于数组实现的动态集合。初始时,`ArrayList` 底层创建一个空数组 `elementData`,并设置 `size` 为 0。当首次添加元素时,会调用 `grow` 方法将数组扩容至默认容量 10。之后每次添加元素时,如果当前数组已满,则会再次调用 `grow` 方法进行扩容。扩容规则为:首次扩容至 10,后续扩容至原数组长度的 1.5 倍或根据实际需求扩容。例如,当需要一次性添加 100 个元素时,会直接扩容至 110 而不是 15。
Java ArrayList扩容的原理
|
28天前
|
存储 缓存 安全
Java 集合框架优化:从基础到高级应用
《Java集合框架优化:从基础到高级应用》深入解析Java集合框架的核心原理与优化技巧,涵盖列表、集合、映射等常用数据结构,结合实际案例,指导开发者高效使用和优化Java集合。
39 4
|
1月前
|
Java
Java 8 引入的 Streams 功能强大,提供了一种简洁高效的处理数据集合的方式
Java 8 引入的 Streams 功能强大,提供了一种简洁高效的处理数据集合的方式。本文介绍了 Streams 的基本概念和使用方法,包括创建 Streams、中间操作和终端操作,并通过多个案例详细解析了过滤、映射、归并、排序、分组和并行处理等操作,帮助读者更好地理解和掌握这一重要特性。
35 2
|
1月前
|
存储 Java
判断一个元素是否在 Java 中的 Set 集合中
【10月更文挑战第30天】使用`contains()`方法可以方便快捷地判断一个元素是否在Java中的`Set`集合中,但对于自定义对象,需要注意重写`equals()`方法以确保正确的判断结果,同时根据具体的性能需求选择合适的`Set`实现类。
|
1月前
|
安全 Java
Java多线程集合类
本文介绍了Java中线程安全的问题及解决方案。通过示例代码展示了使用`CopyOnWriteArrayList`、`CopyOnWriteArraySet`和`ConcurrentHashMap`来解决多线程环境下集合操作的线程安全问题。这些类通过不同的机制确保了线程安全,提高了并发性能。
|
1月前
|
存储 Java 索引
Java中的数据结构:ArrayList和LinkedList的比较
【10月更文挑战第28天】在Java编程世界中,数据结构是构建复杂程序的基石。本文将深入探讨两种常用的数据结构:ArrayList和LinkedList,通过直观的比喻和实例分析,揭示它们各自的优势与局限,帮助你在面对不同的编程挑战时做出明智的选择。