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单行初始化内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java多线程中sleep和wait区别

    Java多线程中sleep和wait区别

    本文主要介绍了Java多线程中sleep和wait区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • springboot后端接收前端传数组参数三种方法

    springboot后端接收前端传数组参数三种方法

    这篇文章主要给大家介绍了关于springboot后端接收前端传数组参数三种方法,文中通过实例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2023-07-07
  • Hibernatede 一对多映射配置方法(分享)

    Hibernatede 一对多映射配置方法(分享)

    下面小编就为大家带来一篇Hibernatede 一对多映射配置方法(分享)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09
  • Spring Cloud oauth2 认证服务搭建过程示例

    Spring Cloud oauth2 认证服务搭建过程示例

    这篇文章主要为大家介绍了Spring Cloud oauth2 认证服务搭建过程示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • SpringMVC拦截器快速掌握下篇

    SpringMVC拦截器快速掌握下篇

    拦截器(Interceptor)是一种动态拦截方法调用的机制,在SpringMVC中动态拦截控制器方法的执行。本文将详细讲讲SpringMVC中拦截器的概念及入门案例,感兴趣的可以尝试一下
    2022-08-08
  • Java中可变长度参数代码详解

    Java中可变长度参数代码详解

    这篇文章主要介绍了Java中可变长度参数代码详解,涉及了实参个数可变的定义方法,数组包裹实参等几个问题,具有一定参考价值,需要的朋友可以了解下。
    2017-12-12
  • mybatis的foreach标签语法报错的解决

    mybatis的foreach标签语法报错的解决

    这篇文章主要介绍了mybatis的foreach标签语法报错的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-02-02
  • 解决java转义json出现\u0000 等乱码的问题

    解决java转义json出现\u0000 等乱码的问题

    这篇文章主要介绍了解决java转义json出现\u0000 等乱码的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-03-03
  • Java全版本特性与用法示例(含总览 + 分版本要点)

    Java全版本特性与用法示例(含总览 + 分版本要点)

    Java自JDK8开启现代化演进以来,始终遵循半年特性版本+两年LTS(长期支持)版本的发布节奏,持续在语言表达力、并发性能、开发体验、安全能力四大维度突破,这篇文章主要介绍了Java全版本特性与用法(含总览+分版本要点)的相关资料,需要的朋友可以参考下
    2026-05-05
  • Springboot 配置SqlSessionFactory方式

    Springboot 配置SqlSessionFactory方式

    这篇文章主要介绍了Springboot 配置SqlSessionFactory方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12

最新评论