Java中ArrayList单行初始化的多种方法

 更新时间:2025年07月03日 10:27:03   作者:1010n111  
在Java开发中,我们经常需要初始化列表,尤其是ArrayList,用于存储和管理数据,为了提高代码的简洁性和可读性,我们希望能在一行代码内完成ArrayList的初始化,本文将介绍多种在Java中单行初始化ArrayList的方法,需要的朋友可以参考下

Java中ArrayList的单行初始化方法

技术背景

在Java开发中,我们经常需要初始化列表,尤其是ArrayList,用于存储和管理数据。为了提高代码的简洁性和可读性,我们希望能在一行代码内完成ArrayList的初始化。本文将介绍多种在Java中单行初始化ArrayList的方法。

实现步骤

1. 使用Arrays.asList方法

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        // 创建一个不可变大小的List
        List<String> places = Arrays.asList("Buenos Aires", "Córdoba", "La Plata");
        // 若需要可变的ArrayList,可进一步转换
        ArrayList<String> mutablePlaces = new ArrayList<>(places);
    }
}

Arrays.asList方法会返回一个固定大小的列表,若要得到可变的ArrayList,可将其作为参数传递给ArrayList的构造函数。

2. 使用双括号初始化

import java.util.ArrayList;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        List<String> places = new ArrayList<String>() {{
            add("A");
            add("B");
            add("C");
        }};
    }
}

双括号初始化实际上创建了一个ArrayList的匿名子类,并在实例初始化块中添加元素。不过这种方法会创建额外的类,可能会带来一些性能开销。

3. 使用List.of方法(Java 9及以上)

import java.util.ArrayList;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        // 创建一个不可变的List
        List<String> places = List.of("Buenos Aires", "Córdoba", "La Plata");
        // 若需要可变的ArrayList,可进一步转换
        ArrayList<String> mutablePlaces = new ArrayList<>(places);
    }
}

List.of方法会返回一个不可变的列表,若要得到可变的ArrayList,同样可将其作为参数传递给ArrayList的构造函数。

4. 使用Stream API(Java 8及以上)

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class Main {
    public static void main(String[] args) {
        // 创建一个List
        List<String> places = Stream.of("Buenos Aires", "Córdoba", "La Plata")
                                   .collect(Collectors.toList());
        // 若需要确保是ArrayList
        ArrayList<String> arrayListPlaces = Stream.of("Buenos Aires", "Córdoba", "La Plata")
                                                  .collect(Collectors.toCollection(ArrayList::new));
    }
}

Stream API提供了一种灵活的方式来处理元素,通过Stream.of创建流,再使用collect方法将流转换为列表。

5. 使用Guava库

import com.google.common.collect.Lists;
import java.util.ArrayList;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        ArrayList<String> places = Lists.newArrayList("Buenos Aires", "Córdoba", "La Plata");
    }
}

Guava库提供了Lists.newArrayList方法,可方便地创建并初始化ArrayList

核心代码

以下是一个综合示例,展示了上述多种方法的使用:

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import com.google.common.collect.Lists;

public class ArrayListInitialization {
    public static void main(String[] args) {
        // 使用Arrays.asList
        List<String> list1 = Arrays.asList("A", "B", "C");
        ArrayList<String> arrayList1 = new ArrayList<>(list1);

        // 使用双括号初始化
        List<String> list2 = new ArrayList<String>() {{
            add("A");
            add("B");
            add("C");
        }};

        // 使用List.of(Java 9及以上)
        List<String> list3 = List.of("A", "B", "C");
        ArrayList<String> arrayList3 = new ArrayList<>(list3);

        // 使用Stream API
        List<String> list4 = Stream.of("A", "B", "C").collect(Collectors.toList());
        ArrayList<String> arrayList4 = Stream.of("A", "B", "C")
                                             .collect(Collectors.toCollection(ArrayList::new));

        // 使用Guava库
        ArrayList<String> arrayList5 = Lists.newArrayList("A", "B", "C");
    }
}

最佳实践

  • 选择合适的方法:根据项目的Java版本和具体需求选择合适的初始化方法。如果是Java 9及以上版本,推荐使用List.of方法;如果需要灵活处理元素,可使用Stream API。
  • 考虑可变性:如果列表需要在后续进行修改,确保初始化的列表是可变的。如使用Arrays.asListList.of返回的列表是不可变的,需要进一步转换为ArrayList
  • 避免过度依赖外部库:虽然Guava库提供了方便的方法,但如果项目中没有引入该库,不建议为了初始化ArrayList而引入它。

常见问题

1. Arrays.asList和List.of的区别

  • Arrays.asList返回的列表是固定大小的,可通过set方法修改元素,但不能添加或删除元素;List.of返回的列表是不可变的,任何修改操作都会抛出异常。
  • Arrays.asList允许传入null元素,而List.of不允许。

2. 双括号初始化的缺点

双括号初始化会创建一个匿名子类,增加了类的数量和内存开销,同时可能导致内存泄漏。因此,不建议在性能敏感的场景中使用。

3. Stream API的性能问题

使用Stream API初始化列表可能会带来一定的性能开销,尤其是在处理大量元素时。因此,在性能要求较高的场景中,应谨慎使用。

到此这篇关于Java中实现ArrayList单行初始化的方法的文章就介绍到这了,更多相关Java ArrayList单行初始化内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • springboot项目如何开启https服务

    springboot项目如何开启https服务

    这篇文章主要介绍了springboot项目如何开启https服务方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-04-04
  • Java实现插入公式到PPT的示例代码

    Java实现插入公式到PPT的示例代码

    PPT中可插入公式,用于放映时演示相关内容的论证、推算的依据。通过代码,我们可借助特定的工具来实现在PPT中的插入公式,本文将对此作详细介绍
    2022-07-07
  • springboot中如何使用openfeign进行接口调用

    springboot中如何使用openfeign进行接口调用

    这篇文章主要介绍了springboot中如何使用openfeign进行接口调用问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • SpringBoot框架如何管理Xml和CSV

    SpringBoot框架如何管理Xml和CSV

    XML是可扩展标记语言,是一种用于标记电子文件使其具有结构性的标记语言。CSV是一种通用的、相对简单的文件格式,通常被用在大数据领域,进行大规模的数据搬运操作,本文将介绍SpringBoot框架如何管理Xml和CSV
    2021-06-06
  • 在Java中实现让线程按照自己指定的顺序执行

    在Java中实现让线程按照自己指定的顺序执行

    这篇文章主要介绍了在Java中实现让线程按照自己指定的顺序执行,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-06-06
  • spring Boot与Mybatis整合优化详解

    spring Boot与Mybatis整合优化详解

    关于spring-boot与mybatis整合优化方面的介绍,就是Mybatis-Spring-boot-starter的介绍,具体内容详情大家参考下本文
    2017-07-07
  • 10个SpringBoot参数验证你需要知道的技巧分享

    10个SpringBoot参数验证你需要知道的技巧分享

    参数验证很重要,是平时开发环节中不可少的一部分,那么在Spring Boot应用中如何做好参数校验工作呢,本文提供了10个小技巧,你知道几个呢
    2023-03-03
  • Java并发容器相关知识总结

    Java并发容器相关知识总结

    今天给大家带来的文章是Java并发容器的相关知识,文中有非常详细的介绍,对正在学习Java并发容器的小伙伴们很有帮助,需要的朋友可以参考下
    2021-06-06
  • Jmeter自定义函数base64加密实现过程解析

    Jmeter自定义函数base64加密实现过程解析

    这篇文章主要介绍了Jmeter自定义函数base64加密实现过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07
  • spring boot 使用Aop通知打印控制器请求报文和返回报文问题

    spring boot 使用Aop通知打印控制器请求报文和返回报文问题

    这篇文章主要介绍了spring-boot 使用Aop通知打印控制器请求报文和返回报文,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2018-04-04

最新评论