ArrayList.toArray(T[] a) 的说明首先说明,下面是从jdk api 文档中看到的,这里只记录下午无特别的事情,就想着研究下常用的java 源码,在这之前肯定要先看下jdk api 文档,心里有对这些实现的认识,看到了ArrayList ,其中的一个方法 toArray(T[]a), 这个方法是将一个链表转换成数组,在知道这个方法之前,一直自己用循环的方法转换成数组。在知道这个方
来源: ArrayList.toArray(T[] a) 的说明 – Leon的专栏 – 博客频道 – CSDN.NET
首先说明,下面是从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 方法
- get 先验证下标值,再取值
- set 方法会返回被覆盖的元素值,也就是说添加替换新元素时,