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)


相关推荐

发表回复

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

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