【重识Java】一文弄懂ArrayList所有常见操作

💬: ArrayList 类是一个可以动态修改的数组,与普通数组的区别就是它是没有固定大小的限制,我们可以添加或删除元素。
ArrayList 继承了 AbstractList ,并实现了 List 接口。

在这里插入图片描述

一、基础部分

1.特点

最大的特点:长度可变。
在ArrayList内部封装了一个长度可变的数组,当存入的元素超过数组长度时,ArrayList会在内存中分配一个更大的数组来存储这些元素,因此可以将ArrayList集合看作一个长度可变的数组。

2.使用方法

(1)初始化

ArrayList objectName =new ArrayList<>();  // 初始化

  • E: 泛型数据类型,用于设置 objectName 的数据类型,只能为引用数据类型
  • objectName: 对象名。

以下是 基本数据类型 对应的 引用数据类型,但并不只有这些引用数据类型。

在这里插入图片描述

除了以上这些引用数据类型之外,我们自定义的类也属于引用数据类型。如下:<br /

ArrayList objectName =new ArrayList< Phone >();  // 初始化

  • 其中Phone是我们自定义的手机类

(2)常用方法

  1. 添加元素

![image.png](https://img-blog.csdnimg.cn/img_convert/ab6195d5e923eb602c3137a3d582e236.png#clientId=u241736d6-e8aa-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=86&id=ud284a1ce&margin=[object Object]&name=image.png&originHeight=107&originWidth=626&originalType=binary&ratio=1&rotation=0&showTitle=false&size=20855&status=done&style=none&taskId=u86094e36-84d1-42b8-
bb06-86182c847d7&title=&width=500.8)

  1. 删除元素

image.png

注意此处的removeAll(),其删除的是两集合的交集部分,有时很可能会用到。

  1. 修改元素
    在这里插入图片描述
  2. 查找元素

在这里插入图片描述
(判空)

找指定值的索引
(找指定值的索引)

在这里插入图片描述
(获取指定索引处的值)

  1. 遍历列表

有三种遍历方式,下面的是第三种(不常见),可见具体实例

在这里插入图片描述

  1. 排序
    在这里插入图片描述


具体实例:

import java.util.ArrayList;

public class Test3 {
    public static void main(String[] args) {
        Test3 test3 = new Test3();

        ArrayList<String> sites = new ArrayList<String>();
        ArrayList<String> test = new ArrayList<String>();
        // 添加元素
        sites.add("Google");
        sites.add("Runoob");
        sites.add("Taobao");
        sites.add("Weibo");
        sites.add("Weibo");
        sites.add(1,"windx"); //将"windx"添加到目标索引1处,该索引及之后元素均后移

        test.add("Google");
        test.add("Bill");

        //删除元素
        sites.remove("Weibo"); //删除给定值(若有多个相同值,则删除索引最小的那个)
        sites.remove(1); //删除对应索引位置的值
        //删除一组元素
        sites.removeAll(test); //在sites中删除sites与test的交集部分
        //删除所有元素
        test.clear(); //clear方法会将列表清空

        //添加一组元素
        sites.addAll(test);  //默认添加到最后
        sites.addAll(1,test);  //也可以从指定索引处开始添加

        //修改元素
        sites.set(1,"xlk"); //将指定索引处元素修改为指定元素

        //查找元素
        if(sites.contains("xlk")){ //看列表中是否含有xlk
            System.out.println(sites.indexOf("xlk")); //找到xlk对应的索引值,若有多个则返回最早出现的,没有则返回-1
            System.out.println(sites.lastIndexOf("xlk")); //同上,但是返回最晚出现的,没有同样返回-1
        }

        //遍历列表
        //方法一:for遍历
        for (int i = 0; i < sites.size(); i++) {
            System.out.println(sites.get(i));
        }
        //遍历列表(for-each遍历)
        for (String i : sites) {
            System.out.println(i);
        }
        //遍历列表(foreach()结合lambda表达式方法遍历)
        sites.forEach((e) -> {
            System.out.println(e);
        });


    }
}

更多方法的具体使用详见 菜鸟教程-ArrayList

(3)与数组、字符串之间的转换

  • 列表 ——> 数组

基本格式:
arraylist.toArray(T[ ] arr)

参数说明:

  • T [ ] arr(可选参数)- 用于存储 列表转换后的数组元素 的 数组

注意:这里 T 指的是数组的类型。
返回值:
如果参数 T[ ] arr 作为参数传入到方法,则返回 T 类型的数组。
如果未传入参数,则返回 Object 类型的数组。

//1.传入参数:

// 创建一个新的 String 类型的数组
// 传入的数组长度要 ≥ ArrayList 长度
String[] arr = new String[sites.size()];
// 将ArrayList对象转换成数组,转换后就是arr数组
sites.toArray(arr);

//2.不传入参数:

// 将 ArrayList 对象转换成数组
// 转换后就是Object类型的数组
Object[] obj = sites.toArray();
//如果要转成其它类型的,可以进行强制转换
String[] arr2 = (String[]) sites.toArray();
  • 列表 ——> 字符串

如果使用toString()方法将列表直接转字符串得到的其实并不是那种元素拼接后得到的字符串,而是把列表完整的变成了字符串,也就说会带上 逗号 和 中括号

String str = sites.toString();  //sites是一个列表
for (int i = 0; i < str.length(); i++) {
    System.out.print(str.charAt(i)+"-");//用 - 分隔转换后的字符串的每一个字符
}

结果:
在这里插入图片描述

所以,如果想得到 xlkwindxBill 这样的字符串,还需要去掉前后的[ ],以及中间的逗号

  • 数组 ——> 列表

最直接的方式是遍历数组,依次添加,如下所示:

int[] nums = new int[n];
ArrayList<Integer> list = new ArrayList<Integer>();
for (int num : nums) {
    list.add(num);
}

其次是使用Collections的方法addAll( ) 💡推荐

String[] arr = {"Google","Tencent","ByteDance","Alibaba"};
List<String> arraylist = new ArrayList<String>() ;
Collections.addAll(arraylist, arr);

最后,可通过JDK8的Stream流将3总基本类型数组转为List

如果JDK版本在1.8以上,使用流stream来将下列3种数组快速转为List,分别是int[],long[],double[],不支持short[ ],byte[ ],char[]在JDK1.8中暂不支持

int[] ints = {2, 34, 55, 22, 11};
long[] longs = {1, 2, 3};
double[] doubles = {1, 2, 3};
Arrays.stream(ints).boxed().collect(Collectors.toList());
Arrays.stream(longs).boxed().collect(Collectors.toList());
Arrays.stream(doubles).boxed().collect(Collectors.toList());

  • 字符串 ——> 列表

这个需求有多种可能,考虑如下:

1️⃣: 如果要将单个字符作为一个元素
没有好的方法,就是创建一个列表,然后使用add()方法添加

2️⃣: 如果使用指定字符作为间隔符
可以使用Arrays.asList( )直接进行转换,但一定要注意转换结果是AbstractList类型(该类型无法添加和删除元素)

🕑代码如下:

List strAbstractList = new ArrayList<String>();
String str ="I will change the world";
strAbstractList = Arrays.asList(str.split(" ")); //此处指定空格为分隔符

🕓执行结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值