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

Java之数组转集合&集合转数组[通俗易懂]一、数组转换为集合需要注意的是,转换只能转换为List集合。那么为什么不能转换为Set集合呢?原因是:Set不能存放重复元素,所以若转换为Set集合可能出现丢失元素的情况。。。数组转换为集合使用的是数组的工具类Arrays的静态方法asList。查看API文档可知该方法返回由指定数组支持的固定大小的列表。eg:importjava.util.Arrays;importjava.u…

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

一、数组转换为集合

需要注意的是,转换只能转换为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<String> 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<String> 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<String> 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<String> list = Arrays.asList(strArr);
	System.out.println(list); 
	/*list.add(1,"杨紫");这样直接调用add方法会出现运行异常。
	 *可以利用空集合调用addAll方法将转化后的集合全部添加新集合就可以进行操作了。
	 */
	 List<String> 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<String> list = Arrays.asList(strArr);
			System.out.println(list); 
//		    List<String> newList = new ArrayList<>();
//			newList.addAll(list);
//		    newList.add(1,"杨紫");
//		    System.out.println(newList);
			 List<String> 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<String> list = new ArrayList<String>();
    	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()方法。
    	 */
	}
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • MATLAB画图语句_excel绘图技巧

    MATLAB画图语句_excel绘图技巧转载画图技巧matlab调用OriginMatlab作出的图普遍没有Origin作出的美观好看,而且导出为eps或emf格式后会有各种奇怪的Bug。目前普遍采用的一种方法是,将Matlab数据导出为mat文件后再导入Origin中手工作图,这种方式需要不少重复性劳动,并不是一种很完美的解决方案。前几天偶然看到Origin提供了COM接口可供Matlab调用,于是就研究了下可否用Matla…

  • 线性规划问题(一)

    线性规划问题(一)实验目的:通过实验,使学生了解LINGO软件的基本功能,掌握LINGO软件的求解过程,以及熟悉LINGO软件的主要菜单命令,能用LINGO软件解线性规划问题。实验要求:实验步骤要有模型建立,模型

  • matlab生成浮雕灰度图,将照片做成浮雕灰度图[通俗易懂]

    matlab生成浮雕灰度图,将照片做成浮雕灰度图[通俗易懂]原标题:将照片做成浮雕灰度图做雕刻行业的朋友都知道,在日常的雕刻生产中常用到的文件格式有灰度图以及精雕的浮雕图。经常会接到一些客户的咨询,如何将照片做成浮雕灰度图?在回答这个问题之前,我觉得有必要先说下浮雕灰度图的概念。灰度图像指的是每个像素只有一个采样颜色的图像。这类图像通常显示为从最暗黑色到最亮的白色的灰度,尽管理论上这个采样可以任何颜色的不同深浅,甚至可以是不同亮度上的不同颜色。灰度图像与黑…

  • 微信小程序蓝牙通讯蓝牙模块demo[通俗易懂]

    微信小程序蓝牙通讯蓝牙模块demo[通俗易懂]公司项目用到蓝牙和硬件通讯,APP正在开发,弄一个微信小程序蓝牙通讯的demo,可能后期会有微信蓝牙的项目,第一次搞,遇到2个坑:1.安卓和苹果获取的硬件服务UUID顺序不同2.目前用的这一版“启用低功耗蓝牙设备特征值变化时的notify功能”在安卓和苹果的测试机上都返回启动失败,其实是已经启动成功,在我同事安卓手机上返回的正常。index.wxml适配器状态:{{

  • Java–Java版本和JDK版本「建议收藏」

    Java–Java版本和JDK版本「建议收藏」对于Java初学者,经常会听到同事,或看到网上Java版本和JDK版本不一的叫法,不明白这两者到底什么关系?其实博主当年初学Java时也有这样的困惑,今天我们就来好好探讨一下,如有不对之处,请加以指正,不喜勿喷,谢谢!Java版本叫法:Java6、Java8、Java11、Java13(当前最新版本Java17)等这一类“JavaX”的Java版本名称同时又会听到,看到JDK版本叫法:JDK1.6、JDK1.8等这种“J…

  • jQuery雷达扫描切换幻灯片代码

    jQuery雷达扫描切换幻灯片代码

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号