toArray()与toArray(T [] a)的区别「建议收藏」

toArray()与toArray(T [] a)的区别「建议收藏」1、Object[]toArray()原理:将集合转换为Object类型的数组并返回该数组(以首地址的形式)。 调用格式:Object[]a=collecton.toArray() 注意:(1)前面类型必须为Object[]且不能被强制转换。(2)需要在遍历Objecta[]时,再强制转换a[n]的类型。由于编译器在语法上无法检测到类型错误,容易

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

1、Object[] toArray()
原理:将集合转换为Object类型的数组并返回该数组(以首地址的形式)。 

调用格式: Object []a=collecton.toArray() 

注意:(1)前面类型必须为Object[]且不能被强制转换。
           (2)需要在遍历Object a[]时,再强制转换a[n]的类型。由于编译器在语法上无法检测到类型错误,容易出现类型使用不当。

附注:
collection.toArray()是旧式的获得对象数组的方法。

在java5引入泛型之前,这是唯一的获得对象数组的方法。



2、<T> T[] toArray(T[] a)
原理:根据参数数组的类型,构造了一个与向量元素个数相等的空数组。
调用格式: 
(1)String a[] = collection.toArray(new String[0]);//将collection中的内容保存到数组a中。
(2)return collection.toArray(new String[0])//若数组容量太小,将自动重新分配一个数组。
这个方法安全,明确。
(3)String s[] = collection.toArray(new String[collection.size()]);//姑且认为是最好的使用方式。
附注:toArray(T[] a)是Java5 引入泛型模板机制后的新调用方法。区别就是明确了类型。
如果Collection在创建时明确了类型,比如Collection<String>,这里的方法也有了相应的类型。编译器可以检测到类型错误。

代码示例:
public class RandomTeacher {
	private static String[] getRandomteachers(String[] teachers, int n) {
		Vector<String> vName = new Vector<String>();

		for (int i = 0; i < n; i++) {
			while (true) {
				Random random = new Random();

				int index = random.nextInt(teachers.length - 1);
				if (vName.contains(teachers[index]) == false) {
					vName.add(teachers[index]);
					break;
				}
			}
		}
		//1.
//		return vName.toArray(new String[1]);//以空数组作为参数
		
		//2.
//		String [] choosedTeacher = new String[3];//当空间不够用时,toArray(T[] a)会自动分配一个新的数组
//		vName.toArray(choosedTeacher);

		//3.姑且认为是最好的。
		return vName.toArray(new String[vName.size()]);
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		String teachers[] = { "张", "赵", "刘", "钱", "孙", "李", "周", "吴", "郑", "王" };
		String[] choosedTeachers = RandomTeacher.getRandomteachers(teachers, 5);
		for (int i = 0; i < choosedTeachers.length; i++)
			System.out.println("teacher " + (i + 1) + " : "+ choosedTeachers[i]);

	}

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 微信公众号开发教程(一) 验证接入[通俗易懂]

    作者:陈惠,叩丁狼教育高级讲师。原创文章,转载请注明出处。微信公众号开发教程(一)验证接入本篇文章主要介绍了微信公众号开发接入详细流程,希望对刚接触公众号开发的同学有所帮助,有兴趣的同学可多多关注叩丁狼公众号,后续会更新不同的公众号小案例。公众号的分类我们平常在微信应用上会看到有很多的公众号,但是各自并不一样,公众号也分很多种类型,不过最常见的就是服务号和订阅号了。下面我们来看一下他们的区别:1、…

    2022年4月12日
    455
  • NLB单播和多播区别

    NLB单播和多播区别http yuntcloud blog 51cto com

    2025年7月16日
    6
  • linux下ll命令查看文件属性_linux中ll命令没用

    linux下ll命令查看文件属性_linux中ll命令没用ll命令其实就是ls-l,当然如果想显示隐藏信息就是ls-al。我个人是特别喜欢ll代替ls-al命令,并且还要有颜色的那种。今天卸载软件重新安装环境变量怎么都不对了,一生气把环境变量都清空了。命令:unsetPATH然后就手动添加环境变量:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/root/…

    2025年11月27日
    3
  • 什么是协程_什么时候使用协程和线程

    什么是协程_什么时候使用协程和线程先搞清楚,什么是协程。你可能已经听过『进程』和『线程』这两个概念。进程就是二进制可执行文件在计算机内存里的一个运行实例,就好比你的.exe文件是个类,进程就是new出来的那个实例。进程是计算机系

    2022年8月2日
    9
  • Intellij idea 主题下载网址

    Intellij idea 主题下载网址Intellijidea主题下载网址 http://color-themes.com/?view=index

    2022年5月6日
    106
  • 智能网关是路由器吗_一般路由器网关是多少

    智能网关是路由器吗_一般路由器网关是多少配制成路由网关filters作用是让页面请求地址变成自己设置的地址现在页面出现了400错误因为之前的renrne-fast里面自己配置了跨域等于配置了二个跨域所以我们配置跨域的时候要把他的注释掉addallowOriginPattern这个注解…

    2022年7月28日
    8

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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