ArrayList.toArray(T[] a) 的说明

首先说明,下面是从jdk api 文档中看到的,这里只记录

下午无特别的事情,就想着研究下常用的java 源码,在这之前肯定要先看下jdk api 文档,心里有对这些实现的认识,看到了ArrayList ,其中的一个方法 toArray(T[]a), 这个方法是将一个链表转换成数组,在知道这个方法之前,一直自己用循环的方法转换成数组。

在知道这个方法之后,

用的第一版

String[] desc = new String[]{};
list.toArray(desc);
output(desc);

显然,经过测试这样并不能完成任务,desc 是空的,就有了下面的版本

String[] desc = new String[]{};
desc = list.toArray(desc);
output(desc);

这样也可以完成任务,当时总觉着有些问题,也没多想,反正只要完成想要的结果就可以了。

直到今天,看到文档

原来如果desc 不足以容纳list 时,会产生一个新的数组,之前的desc 不变,所以第一版中desc 初始化为空的数组,肯定不能容纳任何元素,故产生新的数据返回,output 时还是之前的空。

这也是第二版可以将返回的数组重新赋值给desc ,output 时也就能获得正确的结果;

如果写到这就完了,那岂不是不当于没写

今天看文档才知道的,必须要有用,
思来想去,只要desc 可以容纳toArray 之后的元素不就可以了,于是有了下面的版本:

String[] desc = new String[list.size()];
list.toArray(desc);
output(desc);

这下看着舒服多了,看代码就知道要实现什么目的,还是要多看文档,官方文档是最好的资料,加油,没事就来折腾文档与源码

ensureCapacity(int minCapacity)

这个方法保证会产生最少 minCapacity 个空间,但是不保证就是这么多,
如果现有容量已经大于minCapacity, 则不做处理
否则方法首先做的是:将现在有的容量扩展1.5 倍,之后再将新的容量与minCapacity 比较,取较大值

get/set 方法

  1. get 先验证下标值,再取值
  2. set 方法会返回被覆盖的元素值,也就是说添加替换新元素时,

ArrayList.toArray(T[] a) 的说明相关推荐

  1. [转载] Java ArrayList toArray(T[] a) 解惑

    参考链接: Java中的Array vs ArrayList 先看一个小的代码片段 ArrayList<Integer> arrayList = new ArrayList<> ...

  2. ArrayList.toArray()

    ArrayList.toArray()时,出现java.lang.ClassCastException的错误. ArrayList类扩展AbstractList并执行List接口.ArrayList支 ...

  3. ArrayList.toArray()的用法

    当使用ArrayList时,有时想获得一个实际的数组,这个数组包含了列表的内容.可以通过调用方法toArray()来实现.eg:import java.util.ArrayList;public cl ...

  4. 深入理解ArrayList中 toArray(),toArray(T[])方法

    在List类的具体实现类 ArrayList类中,有一个toArray()方法,该方法的作用是将ArrayList类型的对象转换为数组. 该类型有两个方法:1.toArray()  和 2. toAr ...

  5. 【ArrayList:键盘录入多个数据,以 0 结束,并在控制台输出最大值】

    package com.companyname.common.test;import java.util.ArrayList; import java.util.Arrays; import java ...

  6. java ArrayList转数组

    前言 jdk1.8 toArray()转数组 import java.util.ArrayList;public class TestMain {public static void main(Str ...

  7. List转数组toArray方法

    一.List.toArray方法 List提供了一个将List转为数组的一个非常方便的方法toArray.toArray有两个重载的方法:  Object[] toArray()            ...

  8. arraylist能否接收强转类型_ArrayList 源码解析

    点击上方"IT牧场",选择"设为星标" 技术干货每日送达! 前言 JDK源码解析系列文章,都是基于JDK8分析的,虽然JDK14已经出来,但是JDK8我还不会, ...

  9. java中ArrayList用法详解,基本用法(含增删改查)

    1.什么是ArrayList  ArrayList就是 动态数组,它提供了 ①动态的增加和减少元素  ②实现了ICollection和IList接口 ③灵活的设置数组的大小 ArrayList是一个其 ...

最新文章

  1. 本机无法访问虚拟机上的nignx
  2. python读取dat数据anaconda_基于python的大数据分析-pandas数据读取(代码实战)
  3. 如何在html中添加选择列表,html – 如何在选择列表中添加图像
  4. mysql中0和空值_SQL中空值 和NULL的概念:
  5. linux 系统盘无法ls,linux – ls:阅读目录.:输入/输出错误
  6. 发货通知单不允许新增,只能关联生成
  7. HashTable 源码解析 jdk1.8
  8. php如何防止网站被攻击,防止网站被攻击的办法
  9. Zbrush学习笔记十——制作毛发、模型减面
  10. [转载][路由器] k2p支持ipv6相关设置
  11. linux xps文件,Master PDF:PDF和XPS文件编辑神器
  12. 真正靠谱免费的数据恢复软件哪个好用?
  13. 微信开发者工具 推送报hook declined
  14. 【BZOJ3162】独钓寒江雪(树哈希,动态规划)
  15. python爬取物流信息_手把手教你用Python爬取快递100查询你的物流信息
  16. 059.迪杰斯特拉(Dijkstra)算法的原理以及解决最短路径问题
  17. php 单笔转账到支付宝账户,支付宝公钥证书实现版本
  18. -bash:........ Permission denied
  19. 监督学习最常见的四种算法
  20. 按需视觉识别:愿景和初步方案

热门文章

  1. 送书 | 《Django项目开发实战》
  2. 前缀和与差分——最大加权矩形
  3. 《完全用Linux工作》作者:王垠
  4. 冯诺依曼体系结构+操作系统
  5. 制作标题—数据化组词
  6. 2018中国人工智能企业排行(前50)
  7. Centos重装ssh服务
  8. [转]一个IT人才的精彩故事
  9. 深度学习之语义分割unet算法解读
  10. 量子信息 量子计算机的新闻,应用挑战知多少?美国学界公布量子信息路线图...