Java之数组转集合&集合转数组[通俗易懂] 您所在的位置:网站首页 将数组转化为集合的函数 Java之数组转集合&集合转数组[通俗易懂]

Java之数组转集合&集合转数组[通俗易懂]

2024-04-13 00:31| 来源: 网络整理| 查看: 265

大家好,又见面了,我是你们的朋友全栈君。

一、数组转换为集合

需要注意的是,转换只能转换为List集合。那么为什么不能转换为Set集合呢?

原因是:Set不能存放重复元素,所以若转换为Set集合可能出现丢失元素的情况。。。

数组转换为集合使用的是数组的工具类Arrays的静态方法asList。查看API文档可知该方法返回由指定数组支持的固定大小的列表。

在这里插入图片描述在这里插入图片描述

eg:

import java.util.Arrays; import java.util.List; public class testArrayToList { public static void main(String[] args) { String [] strArr = {"刘雯","胡歌","杜鹃","邓伦"}; List list = Arrays.asList(strArr); System.out.println(list);//[刘雯, 胡歌, 杜鹃, 邓伦] } }

思考一下:如果我想往这个由数组转换过来的集合里面添加元素,我能不能直接调用add方法呢?先试试 eg:

import java.util.Arrays; import java.util.List; public class testArrayToList { public static void main(String[] args) { String [] strArr = {"刘雯","胡歌","杜鹃","邓伦"}; List list = Arrays.asList(strArr); System.out.println(list); list.add(1,"杨紫"); System.out.println(list); } }

结果运行异常:

在这里插入图片描述在这里插入图片描述

那么为什么会出现这样的结果呢?

原因:这个新集合是由数组转换过来的,那么该集合就表示原来的数组,所以对集合的操作就是对数组的操作。那么添加元素会导致原数组扩容,那么就不能表示原来的数组了。所以不允许向该集合添加新元素了。

下面就来测试一下是否改变集合中的元素,原数组元素也随之改变。

import java.util.Arrays; import java.util.List; public class Test1 { public static void main(String[] args) { String [] strArr = {"刘雯","胡歌","杜鹃","邓伦"};//原数组元素 List list = Arrays.asList(strArr); System.out.println(list); list.set(3, "杨紫");//将集合中下标为3的元素替换为“杨紫” System.out.println(list);//修改后的集合打印结果:[刘雯, 胡歌, 杜鹃, 杨紫] //下面打印数组中的元素,检测数组元素是否改变 for (String Arr : strArr) { System.out.println(Arr); /* 打印结果:刘雯 胡歌 杜鹃 杨紫 */ //结果说明:对这个由数组转化过来的集合进行操作会导致原数组的改变。 } } }

怎么解决想往集合添加元素这个问题呢?

方法一:我们通过实验知道数组转化为List是不能增删数据的,如果需要增删,可以利用空集合调用addAll方法将转化后的集合全部添加新集合就可以进行操作了。

示例代码:

import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class testArrayToList { public static void main(String[] args) { String [] strArr = {"刘雯","胡歌","杜鹃","邓伦"}; List list = Arrays.asList(strArr); System.out.println(list); /*list.add(1,"杨紫");这样直接调用add方法会出现运行异常。 *可以利用空集合调用addAll方法将转化后的集合全部添加新集合就可以进行操作了。 */ List newList = new ArrayList(); /* * tips:为什么右边这个尖括号中不写String呢? * 原因:从JDK1.7开始,右侧的尖括号内部可以不写内容,但是还是要写的。 */ newList.addAll(list); newList.add(1,"杨紫"); System.out.println(newList); } }

方法二(比较推荐的写法):

import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class Test1 { public static void main(String[] args) { String [] strArr = {"刘雯","胡歌","杜鹃","邓伦"}; List list = Arrays.asList(strArr); System.out.println(list); // List newList = new ArrayList(); // newList.addAll(list); // newList.add(1,"杨紫"); // System.out.println(newList); List newList = new ArrayList(list); /* *所有的集合都提供了一个带有Collection类型参数的构造方法。 *该构造方法称为:复制构造器 *作用:在创建当前集合的同时,集合中包含给定集合中的所有元素。 */ newList.add(1,"杨紫"); System.out.println(newList); } }二、集合转换为数组在这里插入图片描述在这里插入图片描述

查看API可知有这两个方法可以帮助我们很容易地将集合转换为数组。其中第二个方法是比较常用的,我们可以传入一个指定类型的数组,该数组元素类型与集合元素类型一致。返回值是转化后的数组,该数组会保留集合中的所有元素。 eg:

import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class testListToArray { public static void main(String[] args) { List list = new ArrayList(); list.add("刘雯"); list.add("杨紫"); list.add("胡歌"); String [] strArr = list.toArray( new String[]{}); System.out.println(Arrays.toString(strArr));//[刘雯, 杨紫, 胡歌] /* * 这里解释一下为什么要调用Arrays.toString()方法,因为这个集合转换后的数组类型为 * String,是引用类型的。在这里我们并没有重写toString方法,如果直接打印strArr, * 你将会看到的是@散列码。所以要想看到数组中的内容有两种解决方案,一是你在代码中重写 * toString方法,二是你直接使用Arrays.toString()方法。 */ } }

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/148482.html原文链接:https://javaforall.cn



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有