1.toArray()方法

会返回List中所有元素构成的数组,并且数组类型是Object[]。还要注意一点就是,返回的数组是新生成的一个数组,

也就是说,多次运行toArray()方法会获得不同的数组对象(可以理解存储的数组对象内存地址不一样),但是这些数组对象中内容一样的。
也就是说,toArray()返回的数组是安全的,你可以对它进行任意的修改,其原因就是List不会去维持一个对该返回的数组的引用。

public static void main(String[] args) {List<Integer> list = new ArrayList<>();list.add(1);list.add(2);Object[] objects1 = list.toArray();Object[] objects2 = list.toArray();//比较二个新数组System.out.println("objects1 == objects2 : "+(objects1 == objects2));//对object1 对象的数组进行修改 不会影响到其他  引用的数组objects1[1]=4;//输出修改后的 数组System.out.println("show objects1: "+ Arrays.toString(objects1));//输出引用的数组System.out.println("show objects2: "+ Arrays.toString(objects2));//输出原来的数组System.out.println("show list: "+list);
}输出结果:objects1 == objects2 : false
show objects1: [1, 4]
show objects2: [1, 2]
show list: [1, 2]

2.T[] toArray(T[] a)

T[] toArray(T[] a) 参数传入一个数组,输出和参数同类型的数组,该参数相当于告诉方法要转为什么类型,所以一般传入个0长度的数组就可以了,即代码中的new String[]{}或new String[0]

3.总结:

  1. List接口的toArray()方法就是直接调用Arrays.copyOf(elementData,size),将list中的元素对象的引用装在一个新的生成数组中。
  2. List接口的toArray(T[] a)方法会返回指定类型(必须为list元素类型的父类或本身)的数组对象,如果a.length小于list元素个数就直接调用Arrays的copyOf()方法进行拷贝并且返回新数组对象,新数组中也是装的list元素对象的引用,否则先调用System.arraycopy()将list元素对象的引用装在a数组中,如果a数组还有剩余的空间,则在a[size]放置一个null,size就是list中元素的个数,这个null值可以使得toArray(T[] a)方法调用者可以判断null后面已经没有list元素了。

List的toArray()方法和toArray(T[] a)方法相关推荐

  1. [Java 基础] 深入理解List的toArray()方法和toArray(T[] a)方法

    深入理解List的toArray()方法和toArray(T[] a)方法 这两个方法都是将列表List中的元素转导出为数组,不同的是,toArray()方法导出的是Object类型数组,而toArr ...

  2. 深入理解List的toArray()方法和toArray(T[] a)方法

    深入理解List的toArray()方法和toArray(T[] a)方法 这两个方法都是将列表List中的元素转导出为数组,不同的是,toArray()方法导出的是Object类型数组,而toArr ...

  3. 详解List的toArray()方法和toArray(T[] a)方法

    这两个方法都是将列表List中的元素转导出为数组,不同的是,toArray()方法导出的是Object类型数组,而toArray[T[] a]方法导出的是指定类型的数组. 下面是两个方法的申明及说明, ...

  4. Node.js的环境搭建方法和 npm 的使用方法

    Node.js的环境搭建方法和 npm 的使用方法 Node.js 环境的搭建 Node.js 介绍 Node.js 下载 配置Node.js node.js 测试 npm(包管理器)使用方法 npm ...

  5. 联想集群超算LICO初次使用踩坑说明(遇到的错误,一些使用方法和singularity新建容器方法)

    联想集群超算LICO初次使用踩坑说明(遇到的错误,一些使用方法和singularity新建容器方法) 说明 本文主要写一些我这几天初次使用LICO的过程中遇到的一点问题和解决的办法,还有一些模块的规范 ...

  6. JavaSE学习之路:Idea小技巧一键生成标准JavaBean(一键生成构造方法和Setter和Getter方法)

    Idea小技巧一键生成标准JavaBean(一键生成构造方法和Setter和Getter方法) 方法1:快捷键 快捷键:alt+insert或alt+fn+insert 1.生成有参和无参构造函数 p ...

  7. CString的Trim()方法和TrimStrat()和TrimEnd()方法,TrimRight()和TrimLeft() 方法

    一. CString的Trim()方法和TrimStrat()和TrimEnd()方法.这三个方法用于删除字符串头尾出现的某些字符. Trim()删除字符串头部及尾部出现的空格,删除的过程为从外到内, ...

  8. View的生命周期方法和Activity生命周期方法关系

    View 是在Activity 中使用到的,所以在自定义View的时候,我们需要了解Activity 生命周期方法和View的生命周期方法调用先后顺序.  见如下图 (1) 在Activity onC ...

  9. jquery中的ready方法和window的onload方法的区别

    jquery中的ready方法和window.onload的区别 区别 jquery的ready方法在网页中的DOM结构加载完成后执行.window.onload()必须等到网页全部加载完毕(包括图片 ...

最新文章

  1. bat curl 返回值_bat curl 发送http请求 监控网站
  2. 以服务的方式提供站点基础功能支持
  3. 8 -- 深入使用Spring -- 5...1 启用Spring缓存
  4. 《天涯明月刀》窦德斌:美术需要突破自我的局限
  5. 2019年总结【跨越今天,更不平凡】
  6. linux内核内存映射实验报告,动手实践-Linux内存映射基础(上)
  7. C++语言的技术性规则
  8. c语言将两个文件合成一个,keil中怎么把两个c程序怎么同时同时编译生成一个hex文件...
  9. html做成分页,静态html分页
  10. java根据word模板生成word文档_根据Word模板生成Word文件 (JAVA POI)
  11. 医疗健康大数据:应用实例与系统分析
  12. 关于软件测试的英语面试题,软件测试工程师英语面试题
  13. oracle按序号排序,Oracle排序以及序号的输出
  14. 关于虚拟机.vmdk与.ovf 磁盘装载问题
  15. Ubuntu下使用NTP同步对时
  16. 利用python进行数据分析-数据聚合与分组运算2
  17. 日语输入法键盘假名对应表
  18. pcre_exec()详解
  19. logcat命令使用方法和查看android系统日志缓冲区内容的方法
  20. 基于QT平台的手持媒体播放器项目实战视频教程下载

热门文章

  1. likely和unlikely的区别
  2. From Microservices to Data Microservices-pivotal-专题视频课程
  3. 数据脱敏小探——数据脱敏技术概述
  4. 用GetDta获取图片中柱状图数据
  5. io多路复用的原理和实现_IO多路复用机制详解
  6. Dijkstra算法求解单源最短路径问题
  7. 两个决策树例题经典案例-代码示例
  8. binlog的详细介绍
  9. J2EE 框架结构及核心技术基础面面观
  10. supervisor 使用