Java int[]与ArrayList<>数组 转换 详解

在 Java 中,int[]ArrayList<Integer> 是两种常用的数据结构。由于 int[] 是基本数据类型数组,而 ArrayList<Integer> 是对象集合类型,两者的转换需要注意类型转换的细节。以下是完整的讲解和实现方法。


1. int[] 转换为 ArrayList

方法 1:使用手动遍历

通过遍历数组,将每个元素逐一添加到 ArrayList<Integer> 中。

代码实现
import java.util.ArrayList;public class Main {public static void main(String[] args) {int[] array = {1, 2, 3, 4, 5};// 转换为 ArrayListArrayList<Integer> list = new ArrayList<>();for (int num : array) {list.add(num);}System.out.println(list); // 输出: [1, 2, 3, 4, 5]}
}
说明
  • 手动遍历适合任何版本的 Java。
  • 时间复杂度: O ( n ) O(n) O(n)n 是数组的长度。

方法 2:使用 Java 8 Stream

通过 Arrays.stream()boxed() 方法,将 int[] 转换为 Stream<Integer>,再收集到 ArrayList<Integer>

代码实现
import java.util.ArrayList;
import java.util.Arrays;
import java.util.stream.Collectors;public class Main {public static void main(String[] args) {int[] array = {1, 2, 3, 4, 5};// 使用 Stream 转换为 ArrayListArrayList<Integer> list = Arrays.stream(array).boxed() // 转为 Integer 类型.collect(Collectors.toCollection(ArrayList::new));System.out.println(list); // 输出: [1, 2, 3, 4, 5]}
}
说明
  • 适用于 Java 8 及以上版本。
  • 使用 boxed() 将基本类型 int 转换为包装类型 Integer

2. ArrayList 转换为 int[]

方法 1:使用手动遍历

通过遍历 ArrayList<Integer>,逐一将元素添加到 int[] 中。

代码实现
import java.util.ArrayList;public class Main {public static void main(String[] args) {ArrayList<Integer> list = new ArrayList<>();list.add(1);list.add(2);list.add(3);// 转换为 int[]int[] array = new int[list.size()];for (int i = 0; i < list.size(); i++) {array[i] = list.get(i); // 拆箱 Integer -> int}System.out.println(Arrays.toString(array)); // 输出: [1, 2, 3]}
}
说明
  • 手动遍历适合任何版本的 Java。
  • 通过 list.get(i) 获取元素并自动拆箱为 int

方法 2:使用 Java 8 Stream

通过 Stream.mapToInt()ArrayList<Integer> 转换为 int[]

代码实现
import java.util.ArrayList;public class Main {public static void main(String[] args) {ArrayList<Integer> list = new ArrayList<>();list.add(1);list.add(2);list.add(3);// 使用 Stream 转换为 int[]int[] array = list.stream().mapToInt(Integer::intValue) // 转为 int 类型.toArray();System.out.println(Arrays.toString(array)); // 输出: [1, 2, 3]}
}
说明
  • 适用于 Java 8 及以上版本。
  • 使用 mapToInt() 方法完成从 Integerint 的转换。

3. 综合示例

以下代码实现了 int[]ArrayList<Integer> 的双向转换。

import java.util.ArrayList;
import java.util.Arrays;
import java.util.stream.Collectors;public class Main {public static void main(String[] args) {// int[] 转 ArrayList<Integer>int[] array = {1, 2, 3, 4, 5};ArrayList<Integer> list = Arrays.stream(array).boxed() // 转换为 Integer.collect(Collectors.toCollection(ArrayList::new));System.out.println("int[] -> ArrayList<Integer>: " + list);// ArrayList<Integer> 转 int[]int[] newArray = list.stream().mapToInt(Integer::intValue) // 转换为 int.toArray();System.out.println("ArrayList<Integer> -> int[]: " + Arrays.toString(newArray));}
}

运行结果

int[] -> ArrayList<Integer>: [1, 2, 3, 4, 5]
ArrayList<Integer> -> int[]: [1, 2, 3, 4, 5]

4. 注意事项

  1. 自动装箱与拆箱

    • int 转换为 Integer 是自动装箱。
    • Integer 转换为 int 是自动拆箱。
    • 手动遍历时,这些操作由 JVM 自动完成。
  2. null 的处理

    • 如果 ArrayList<Integer> 包含 null,在转换为 int[] 时会抛出 NullPointerException
    • 示例:
      ArrayList<Integer> list = new ArrayList<>(Arrays.asList(1, null, 3));
      int[] array = list.stream().mapToInt(Integer::intValue).toArray(); // 抛出 NullPointerException
      
  3. 性能

    • 手动遍历方法比 Stream 方法稍快,适用于性能敏感场景。
    • Stream 方法代码更简洁,推荐在现代 Java 项目中使用。

5. 方法对比

转换方向方法优点缺点
int[] -> ArrayList手动遍历简单、高效代码稍显冗长
Stream.boxed()代码简洁,现代风格Java 8 及以上支持
ArrayList -> int[]手动遍历简单、高效代码稍显冗长
Stream.mapToInt()代码简洁,现代风格Java 8 及以上支持

6. 总结

  • 推荐方案
    • 如果使用 Java 8 或更高版本,优先使用 Stream,代码更简洁。
    • 对性能要求高的场景,可以选择手动遍历。
  • 核心操作
    • boxed():将基本类型转换为包装类型。
    • mapToInt():将包装类型转换为基本类型。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/62881.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大数据新视界 -- Hive 基于 MapReduce 的执行原理(上)(23 / 30)

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

Qt 2D绘图之三:绘制文字、路径、图像、复合模式

参考文章链接: Qt 2D绘图之三:绘制文字、路径、图像、复合模式 绘制文字 除了绘制图形以外,还可以使用QPainter::darwText()函数来绘制文字,也可以使用QPainter::setFont()设置文字所使用的字体,使用QPainter::fontInfo()函数可以获取字体的信息,它返回QFontInfo类对象…

React-状态管理详解

1、传统MVC框架的缺陷 什么是MVC&#xff1f; MVC的全名是Model View Controller&#xff0c;是模型(model)&#xff0d;视图(view)&#xff0d;控制器(controller)的缩写&#xff0c;是一种软件设计典范。 V即View视图是指用户看到并与之交互的界面。 M即Model模型是管理数…

AI潮汐日报1128期:Sora泄露引发争议、百度早期研究对AI领域Scaling Law的贡献、Meta发布系列AI开源项目

AI 潮汐日报&#xff0c;旨在提供最新潮、最核心、最有意思的AI速递。四大专栏&#xff1a;今日热点、应用速递、研究进展、思维碰撞。 今日热点 OpenAI文本转视频模型Sora泄露引发争议 OpenAI的文本转视频AI模型Sora在Hugging Face上遭遇泄露&#xff0c;泄露者为参与测试的…

PH热榜 | 2024-12-02

1. Muku.ai 标语&#xff1a;AI网红广告代理公司 介绍&#xff1a;木库AI是家AI网红营销机构&#xff0c;利用AI虚拟形象创作用户原创视频广告。只需提供产品链接&#xff0c;就能生成吸引人的内容&#xff0c;从而提升各大平台的销售额。 产品网站&#xff1a; 立即访问 P…

Flink学习连载文章9--状态(State)

State state 可以理解为-- 历史计算结果 有状态计算和无状态计算 无状态计算: 不需要考虑历史数据, 相同的输入,得到相同的输出!如:map, 将每个单词记为1, 进来一个hello, 得到(hello,1),再进来一个hello,得到的还是(hello,1) 有状态计算: 需要考虑历史数据, 相同的输入,可…

go和python的遍历对比

Go 和 Python 都有强大的循环控制结构&#xff0c;但它们在实现和行为上有所不同&#xff0c;特别是关于索引变量的管理、迭代器的使用以及如何在循环中修改循环变量。以下是 Go 和 Python 循环的详细差异分析&#xff1a; 1. 循环类型&#xff1a; Go&#xff1a; Go 使用 …

嵌入式硬件面试题【经验】总结----会不断添加更新

目录 引言 一、电阻 1、电阻选型时一般从那几个方面考虑 2、上拉电阻的作用 3、PTC热敏电阻作为电源电路保险丝的工作原理 4、如果阻抗不匹配&#xff0c;有哪些后果 二、电容 1、电容选型一般从哪些方面进行考虑? 2、1uf的电容通常来滤除什么频率的信号 三、三极管…

Linux——基础命令(2) 文件内容操作

目录 ​编辑 文件内容操作 1.Vim &#xff08;1&#xff09;移动光标 &#xff08;2&#xff09;复制 &#xff08;3&#xff09;剪切 &#xff08;4&#xff09;删除 &#xff08;5&#xff09;粘贴 &#xff08;6&#xff09;替换,撤销,查找 &#xff08;7&#xff…

Stable Diffusion 3详解

&#x1f33a;系列文章推荐&#x1f33a; 扩散模型系列文章正在持续的更新&#xff0c;更新节奏如下&#xff0c;先更新SD模型讲解&#xff0c;再更新相关的微调方法文章&#xff0c;敬请期待&#xff01;&#xff01;&#xff01;&#xff08;本文及其之前的文章均已更新&…

微信小程序——文档下载功能分享(含代码)

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

高校心理教育辅导系统

私信我获取源码和万字论文&#xff0c;制作不易&#xff0c;感谢点赞支持。 摘 要 随着Internet技术的发展&#xff0c;心理教育辅导系统应运而生&#xff0c;心理教育辅导系统为用户提供了一个更为便利的心理测试咨询平台。所以&#xff0c;为了充分满足高校学生心理教育辅导…

mvc命令

命令 mvc MVC(Model-View-Controller)是一种软件架构模式,用于组织和管理应用程序的代码mvc重要的三部分 (1)‌模型&#xff08;Model&#xff09;‌&#xff1a;负责存储系统的中心数据&#xff0c;提供访问数据的函数&#xff0c;封装了应用程序的功能内核。 (2)视图&…

开源的跨平台SQL 编辑器Beekeeper Studio

一款开源的跨平台 SQL 编辑器&#xff0c;提供 SQL 语法高亮、自动补全、数据表内容筛选与过滤、连接 Web 数据库、存储历史查询记录等功能。该编辑器支持 SQLite、MySQL、MariaDB、Postgres 等主流数据库&#xff0c;并兼容 Windows、macOS、Linux 等桌面操作系统。 项目地址…

Shader的涉及的数学知识总结

着色器&#xff08;Shader&#xff09;编程广泛应用于计算机图形学中&#xff0c;用于实现各种视觉效果。编写高效的着色器需要扎实的数学基础&#xff0c;以下是着色器编程中常见的数学知识及其应用&#xff1a; 1. 向量代数 向量&#xff1a;表示具有大小和方向的量&#x…

数据结构——排序第三幕(深究快排(非递归实现)、快排的优化、内省排序,排序总结)超详细!!!!

文章目录 前言一、非递归实现快排二、快排的优化版本三、内省排序四、排序算法复杂度以及稳定性的分析总结 前言 继上一篇博客基于递归的方式学习了快速排序和归并排序 今天我们来深究快速排序&#xff0c;使用栈的数据结构非递归实现快排&#xff0c;优化快排&#xff08;三路…

Spring Web开发注解和请求(1)

大家好我是小帅&#xff0c;今天我们来学习Spring Web MVC框架&#xff08;入门级&#xff09; 文章目录 1. 什么是 Spring Web MVC&#xff1f;1.1 MVC 定义1.2 什么是Spring MVC ? 2. 学习Spring MVC2.1 建⽴连接第一个spring MVC程序 3. web开发注解的解释3.1RestControlle…

爬虫—Scrapy 整合 ChromeDriver 实现动态网页拉取

在进行爬虫开发时&#xff0c;使用 Scrapy 配合 ChromeDriver 来模拟真实浏览器加载 JavaScript 渲染内容是一种常见且高效的方法。Scrapy 本身是一个非常强大的爬虫框架&#xff0c;然而它默认使用的是 requests 库来抓取静态网页内容。对于需要通过 JavaScript 渲染的动态网页…

剖析kubernetes service的IP能否在宿主机中ping通

文章目录 前言一、serviceIP是怎么产生的二、宿主机中ping serviceIP地址1.ping示例2.为什么ping不通剖析2.1.封装及解封装过程2.2.ICMP报文以太网数据帧格式2.3.原因 三、ping不通svcIP是否跟iptables规则有关&#xff1f;四、为什么ipvs的的clusterIP类型的service能够ping通…

vue项目部署到github pages后页面显示不出来??

问题&#xff1a; 当我们在命令行执行 npm run build 后&#xff0c;项目的目录下会生成一个 dist 文件夹&#xff0c;它里面又包含一个 static 文件夹和一个 index.html 文件&#xff0c;这是 webpack 最终打包好的文件 项目上传到仓库后发现页面为空&#xff0c;找不到文件路…