学习任务:

视频学习

toArray方法介绍

ArrayList转为数组测试

数组转为ArrayList测试

在项目中经常会出现集合与数组之间转换的场景,在Collection接口有两个方法可以实现集合转为数组:

image-20201011073416020

1)toArray():

​ 查询ArrayList类的toArray()方法源代码如下:

image-20201011073905185

​ Arrays.copyOf(elementData, size)表示 复制集合元素到一个新数组(Object[]数组)。

2)toArray(T[] a):

​ 查询ArrayList类的toArray(T[] a)方法源代码如下:

image-20201011074322824

​ 此方法与toArray()不同的是传入了一个数组,阅读源码发现分两种情况:

1)如果传入的数组长度小于ArrayList集合的size大小时

创建一个与传入数组类型一致的数组,将集合元素复制到该数组中,返回该数组。

2)如果传入数组的长度大于ArrayList集合的size大小时

将集合元素复制到该数组中,返回该数组。

为了不浪费数组空间建议传入的数组长度要比ArrayList集合的size小。

package com.pbteach.javase.oop.arraylist.test2;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.Iterator;
import java.util.List;

/**
 * ArrayList与数组之间转换
 * @author 攀博课堂(www.pbteach.com)
 *
 */
public class ArrayListConvert1 {
	
	//ArrayList转为数组
	public static void arraylist_array() {
		System.out.println("===========ArrayList转为数组===========");
		//创建一个ArrayList集合
		List<PbCourse> list = new ArrayList<>();
		
		//添加元素
		list.add(new PbCourse(100L, "攀博课堂-Java面向对象教程", 33));
		list.add(new PbCourse(101L, "攀博课堂-Spring全家桶教程", 44));
		list.add(new PbCourse(102L, "攀博课堂-SpringCloud微服务教程", 55));
		list.add(new PbCourse(103L, "攀博课堂-在线教育分布式项目教程", 66));
		list.add(new PbCourse(104L, "攀博课堂-电子商务项目教程", 66));
		list.add(new PbCourse(105L, "攀博课堂-SpringMVC框架教程", 22));
		//转换为Object[]数组不方便遍历与处理
		Object[] array = list.toArray();
		for (Object object : array) {
			System.out.println(object);
		}
		//指定运行时数组类型,转换为指定类型的数组方便处理
		//new PbCourse[0]表示创建一个没有元素的数组,它相当于一个数组模板
		PbCourse[] pbCourses = list.toArray(new PbCourse[0]);
		for (PbCourse pbCourse : pbCourses) {
			System.out.println(pbCourse);
			System.out.println(pbCourse.getCourseName());
		}
		
	}
	
	public static void main(String[] args) {
		
		arraylist_array();
		
	}
	

}

输出:

===========ArrayList转为数组===========
PbCourse [id=100, courseName=攀博课堂-Java面向对象教程, price=33]
PbCourse [id=101, courseName=攀博课堂-Spring全家桶教程, price=44]
PbCourse [id=102, courseName=攀博课堂-SpringCloud微服务教程, price=55]
PbCourse [id=103, courseName=攀博课堂-在线教育分布式项目教程, price=66]
PbCourse [id=104, courseName=攀博课堂-电子商务项目教程, price=66]
PbCourse [id=105, courseName=攀博课堂-SpringMVC框架教程, price=22]
PbCourse [id=100, courseName=攀博课堂-Java面向对象教程, price=33]
攀博课堂-Java面向对象教程
PbCourse [id=101, courseName=攀博课堂-Spring全家桶教程, price=44]
攀博课堂-Spring全家桶教程
PbCourse [id=102, courseName=攀博课堂-SpringCloud微服务教程, price=55]
攀博课堂-SpringCloud微服务教程
PbCourse [id=103, courseName=攀博课堂-在线教育分布式项目教程, price=66]
攀博课堂-在线教育分布式项目教程
PbCourse [id=104, courseName=攀博课堂-电子商务项目教程, price=66]
攀博课堂-电子商务项目教程
PbCourse [id=105, courseName=攀博课堂-SpringMVC框架教程, price=22]
攀博课堂-SpringMVC框架教程

将数组转为ArrayList使用Arrays类中的asList方法,查阅方法源代码如下:

image-20201011080357649

本方法是一个泛型方法,方法说明如下:

1)参数

接收变长参数

2)输出

根据传入的变长参数创建ArrayList集合对象并返回。

测试代码如下:

	//数组转为ArrayList
	public static void array_arraylist() {
		System.out.println("===========数组转为ArrayList===========");
		//定义一个数组 
		PbCourse[] pbCourses = new PbCourse[] {
				new PbCourse(100L, "攀博课堂-Java面向对象教程", 33),
				new PbCourse(101L, "攀博课堂-Spring全家桶教程", 44),
				new PbCourse(102L, "攀博课堂-SpringCloud微服务教程", 55),
				new PbCourse(103L, "攀博课堂-在线教育分布式项目教程", 66),
				new PbCourse(104L, "攀博课堂-电子商务项目教程", 66),
				new PbCourse(105L, "攀博课堂-SpringMVC框架教程", 22)
		};
		//将数组转换为ArrayList
		List<PbCourse> list = Arrays.asList(pbCourses);
		//遍历集合
		list.forEach(System.out::println);
		
	}
提问-攀博课堂
我要提问 不会就问,有效沟通
关注公众号,加入微信群交流提问。 攀博课堂官方公众号
问答列表,查看本知识点所有问题