java list 和数组互相转换的一些方法

在Java中,List 和 数组(Array) 之间的转换是一个常见的操作。由于它们是不同的数据结构,Java提供了一些方法来在它们之间进行转换。我们会从List到数组和数组到List两种情况分别讨论。

1. List 转 数组

假设你有一个 `List` 类型的对象,想要将其转换为一个数组。你可以使用 List`类的 toArray()方法。

 (a) List 转 数组(Object类型)

最常见的转换是将一个 `List` 转换为一个普通的对象数组 `Object[]`,方法如下:

import java.util.List;
import java.util.ArrayList;public class ListToArrayExample {public static void main(String[] args) {// 创建一个ListList<String> list = new ArrayList<>();list.add("A");list.add("B");list.add("C");// 将List转换为数组(Object类型)Object[] array = list.toArray();// 输出结果for (Object obj : array) {System.out.println(obj);}}
}

在这个例子中,`list.toArray()` 返回的是一个 `Object[]` 类型的数组。此时数组的元素类型是 `Object`,如果需要更具体的类型,可以强制转换。

 (b) List 转 数组(指定类型)

如果你知道 List 中存储的是某个具体类型的元素(比如 `String`),你可以使用 `toArray(T[] a)` 方法来指定数组的类型,从而避免转换时的强制类型转换:

import java.util.List;
import java.util.ArrayList;public class ListToArrayExample {public static void main(String[] args) {// 创建一个ListList<String> list = new ArrayList<>();list.add("A");list.add("B");list.add("C");// 将List转换为数组(指定类型)String[] array = list.toArray(new String[0]);// 输出结果for (String str : array) {System.out.println(str);}}
}

在这个例子中,list.toArray(new String[0]) 生成了一个类型为 String[]的数组。new String[0]表示传入的数组大小,实际上该数组的大小会根据 List 的元素数自动调整。

 (c) 对于更复杂的 List 类型

如果你的 List 中包含自定义类型(比如一个 `Person` 类),转换的方法和上述类似:

import java.util.List;
import java.util.ArrayList;class Person {String name;int age;Person(String name, int age) {this.name = name;this.age = age;}@Overridepublic String toString() {return name + ", " + age;}
}public class ListToArrayExample {public static void main(String[] args) {List<Person> list = new ArrayList<>();list.add(new Person("Alice", 30));list.add(new Person("Bob", 25));// 将List转换为Person类型的数组Person[] array = list.toArray(new Person[0]);// 输出结果for (Person person : array) {System.out.println(person);}}
}

2. 数组 转 List

如果你有一个数组,想要将其转换为一个 `List`,你可以通过 `Arrays.asList()` 方法来实现。

 (a) 数组 转 List(基本数据类型)

对于一个简单的数组(如 `int[]` 或 `String[]`),你可以这样做:

import java.util.Arrays;
import java.util.List;public class ArrayToListExample {public static void main(String[] args) {// 创建一个数组String[] array = {"A", "B", "C"};// 将数组转换为ListList<String> list = Arrays.asList(array);// 输出结果for (String str : list) {System.out.println(str);}}
}

 (b) 数组 转 List(原始类型数组)

注意,`Arrays.asList()` 方法对于原始类型数组(如 `int[]`, `double[]` 等)并不会返回一个 `List<Integer>` 或 `List<Double>` 等类型的 `List`,而是会返回一个 `List<int[]>` 类型的 List。要避免这个问题,你需要将原始类型数组包装成相应的包装类数组,然后再使用 `Arrays.asList()`。

import java.util.Arrays;
import java.util.List;public class ArrayToListExample {public static void main(String[] args) {// 创建一个int数组int[] array = {1, 2, 3};// 将int数组包装为Integer数组Integer[] boxedArray = Arrays.stream(array).boxed().toArray(Integer[]::new);// 将Integer数组转换为ListList<Integer> list = Arrays.asList(boxedArray);// 输出结果for (Integer num : list) {System.out.println(num);}}
}

 (c) 数组 转 List(自定义对象数组)

如果你有一个自定义类型的数组,使用 `Arrays.asList()` 同样适用:

import java.util.Arrays;
import java.util.List;class Person {String name;int age;Person(String name, int age) {this.name = name;this.age = age;}@Overridepublic String toString() {return name + ", " + age;}
}public class ArrayToListExample {public static void main(String[] args) {// 创建一个Person类型的数组Person[] array = {new Person("Alice", 30), new Person("Bob", 25)};// 将数组转换为ListList<Person> list = Arrays.asList(array);// 输出结果for (Person person : list) {System.out.println(person);}}
}

 3. 注意事项

 (a) `Arrays.asList()` 的限制

- 使用 `Arrays.asList()` 创建的 List 是一个 **固定大小 的 List,这意味着你不能向 List 中添加或删除元素。如果试图进行这样的操作,会抛出 `UnsupportedOperationException`。
  
  例如:  

 List<String> list = Arrays.asList("A", "B", "C");list.add("D");  // 运行时抛出 UnsupportedOperationException

  如果你需要一个可修改的 List,应该将其包装在一个新的 `ArrayList` 中:

 List<String> list = new ArrayList<>(Arrays.asList("A", "B", "C"));list.add("D");  // 现在可以修改

(b) 通过 `toArray()` 方法进行类型转换

如果 List 的类型不是你想要的类型(例如 List 存储了类型为 `Object` 的元素),可以在进行转换时强制类型转换。例如:

Object[] objArray = list.toArray();
String[] strArray = (String[]) objArray;  // 强制转换为 String[]

(c) 对于原始类型数组

Java 没有直接将原始类型数组(如 `int[]`, `double[]`)转换为 List 的方法。你可以先将原始类型数组转换为包装类数组,然后再用 `Arrays.asList()` 方法转换成 List。例如:

int[] array = {1, 2, 3};
Integer[] boxedArray = Arrays.stream(array).boxed().toArray(Integer[]::new);
List<Integer> list = Arrays.asList(boxedArray);

 总结

- List 转 数组:使用 `toArray()` 方法。对于类型化的 List,推荐使用 `toArray(T[] a)` 方法,这样可以避免不必要的类型转换。
- 数组 转 List:使用 `Arrays.asList()` 方法,但要注意原始类型数组的特殊情况(它们会被转换为一个包含数组的 List),并且返回的 List 是固定大小的,不能进行添加或删除元素的操作。

希望这个详细的解答能帮助你在 Java 中灵活地进行 List 和数组之间的转换!

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

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

相关文章

python总说的cd是什么

以下适用于windows环境 cd就是change directory的缩写&#xff0c;即改变目录。 讲cd命令之前&#xff0c;先来看看提示符是什么意思。现在的提示符是c:\> c:说明现在的工作盘是c盘&#xff0c;\告诉我们当前的工作目录是根目录。 >的作用是把工作目录和我们要输入的…

【记录50】uniapp安装uview插件,样式引入失败分析及解决

SassError: Undefined variable: "$u-border-color". 表示样式变量$u-border-color没定义&#xff0c;实际是定义的 首先确保安装了scss/sass 其次&#xff0c;根目录下 app.vue中是否全局引入 <style lang"scss">import /uni_modules/uview-ui/in…

Webpack简单介绍及安装

一、介绍 Webpack 是一个现代 JavaScript 应用程序的静态模块打包器&#xff08;module bundler&#xff09;。它将应用程序中的所有依赖项&#xff08;JavaScript、图片、CSS 等&#xff09;打包成一个或多个 bundle。这样做的主要目的是减少加载时间和提高应用程序的加载性能…

vscode不同的项目使用不同的环境变量或编译环境

转载请标明出处&#xff1a;小帆的帆的博客 假如电脑中安装的两套C编译环境&#xff0c;想要切换编译环境时可以在操作系统的环境变量中调整顺序&#xff0c;然后排在前面的环境就会被使用。 这样做的弊端&#xff1a; 麻烦容易忘&#xff0c;忘了项目不报错就可能就不会发现…

汽车IVI中控开发入门及进阶(三十九):ADAS的车道线检测

概述: 自动驾驶汽车中确保驾驶员和乘客安全环境的重要系统之一是高级驾驶员辅助系统(ADAS)。自适应巡航控制、自动制动/转向、车道保持系统、盲点辅助、车道偏离警告系统和车道检测都是ADAS的示例。车道检测向车辆的智能系统显示特定于车道线结构几何特征的信息,以显示车道…

在Win11系统上安装Android Studio

诸神缄默不语-个人CSDN博文目录 下载地址&#xff1a;https://developer.android.google.cn/studio?hlzh-cn 官方安装教程&#xff1a;https://developer.android.google.cn/studio/install?hlzh-cn 点击Next&#xff0c;默认会同时安装Android Studio和Android虚拟机&#…

如何在 Ubuntu 22.04 上安装 MySQL

简介 MySQL 是开发人员最常用的数据库之一&#xff0c;因为它在功能、性能和易用性之间取得了平衡&#xff0c;提供了高性能、可扩展性、安全性、灵活性和低成本。在本教程中&#xff0c;我们将向您展示如何在七个步骤中在 Ubuntu 22.04 上安装 MySQL。我们包括安装、配置、保…

使用Dynadot API确定当前是否有正在执行中的请求

前言 Dynadot是通过ICANN认证的域名注册商&#xff0c;自2002年成立以来&#xff0c;服务于全球108个国家和地区的客户&#xff0c;为数以万计的客户提供简洁&#xff0c;优惠&#xff0c;安全的域名注册以及管理服务。 Dynadot平台操作教程索引&#xff08;包括域名邮箱&…

02、服务器的分类和开发项目流程

硬件介绍 1、服务器分类2.开发流程 1、服务器分类 1.1 服务器分类 1u服务器&#xff08;u表示服务器的厚度&#xff09; 1U4.45cm&#xff1b; 4u服务器&#xff08;u表示服务器的厚度&#xff09; &#xff0c; 服务器有两个电源模块&#xff0c;接在不同的电源&#xff0c;…

[创业之路-199]:《华为战略管理法-DSTE实战体系》- 3 - 价值转移理论与利润区理论

目录 一、价值转移理论 1.1. 什么是价值&#xff1f; 1.2. 什么价值创造 &#xff08;1&#xff09;、定义 &#xff08;2&#xff09;、影响价值创造的因素 &#xff08;3&#xff09;、价值创造的三个过程 &#xff08;4&#xff09;、价值创造的实践 &#xff08;5&…

后摩尔定律时代,什么将推动计算机性能优化的发展?

在摩尔定律时代&#xff0c;每两年芯片上的晶体管数量就会翻一番&#xff0c;这一看似不可避免的趋势被称为摩尔定律&#xff0c;它极大地促进了计算机性能的提高。然而&#xff0c;硅基晶体管不可能一直小下去&#xff0c;半导体晶体管的微型化推动了计算机性能的提升&#xf…

LeetCode:144.前序遍历

跟着carl学算法&#xff0c;本系列博客仅做个人记录&#xff0c;建议大家都去看carl本人的博客&#xff0c;写的真的很好的&#xff01; 代码随想录 LeetCode&#xff1a;144. 二叉树的前序遍历 给你二叉树的根节点 root &#xff0c;返回它节点值的 前序 遍历。 示例 1&#x…

pdf文件中的表格无损提取方案(pdf转Excel),非OCR

非OCR方案&#xff0c;基于java&#xff1a; aspose 21.11版本&#xff08;网上有破解方法&#xff0c;或者参考我另外一篇文章&#xff09; 转换pdf&#xff08;含表格&#xff09;为excel文件&#xff0c;然后可以使用poi对得到的excel文件进行微调。 但是上述方案&#x…

第十七章:反射+设计模式

一、反射 1. 反射(Reflection)&#xff1a;允许在程序运行状态中&#xff0c;可以获取任意类中的属性和方法&#xff0c;并且可以操作任意对象内部的属 性和方法&#xff0c;这种动态获取类的信息及动态操作对象的属性和方法对应的机制称为反射机制。 2. 类对象 和 类的对象(实…

【Linux】结构化命令:for命令

1、基本介绍 for循环假定各个值之间是以空格、制表符或换行符分隔的&#xff0c;因为特殊的环境变量IFS&#xff08;internal field separator&#xff0c;内部字段分隔符&#xff09;&#xff0c;默认情况下&#xff0c;它会将这三者视为字段分隔符。 格式&#xff1a; for v…

Nginx(Linux之Ubuntu)

1.1.什么是Nginx Nginx&#xff08;发音为"engine x"&#xff09;是由俄罗斯开发者Igor Sysoev创建的一款轻量级、高性能的Web服务器。它首次发布于2004年&#xff0c;如今已成为全球最受欢迎的Web服务器之一。Nginx以其卓越的性能和灵活性而闻名&#xff0c;适用于…

vue3+TS+vueX的记录

要求&#xff1a;在页面中使用输入框输入回车后将数据保存到vuex中的数组list中 list为一个数组 内部三个属性为 id value status id为时间戳 value为string 输入的字符串 status为定义的三种状态 待办 在办 完成 1、创建仓库 将 仓库拆分 import { createStore } fro…

【图像分类实用脚本】数据可视化以及高数量类别截断

图像分类时&#xff0c;如果某个类别或者某些类别的数量远大于其他类别的话&#xff0c;模型在计算的时候&#xff0c;更倾向于拟合数量更多的类别&#xff1b;因此&#xff0c;观察类别数量以及对数据量多的类别进行截断是很有必要的。 1.准备数据 数据的格式为图像分类数据集…

Javascript-web API-day02

文章目录 01-事件监听02-点击关闭广告03-随机点名案例04-鼠标经过或离开事件05-可点击的轮播图06-小米搜索框07-键盘类型事件08-键盘事件-发布评论案例09-focus选择器10-评论回车发布11-事件对象12-trim方法13-环境对象14-回调函数15-tab栏切换 01-事件监听 <!DOCTYPE html…

c语言-------循环结构

基本概念 循环结构是C语言中一种重要的程序控制结构&#xff0c;它允许程序在满足一定条件的情况下&#xff0c;反复执行一段代码。这可以避免重复编写相似的代码&#xff0c;提高代码的效率和可读性。 while循环 语法格式 while (条件表达式) { 循环体语句; } 执行流程 首先判…