H5W3
当前位置:H5W3 > 其他技术问题 > 正文

ArrayList问题

今天在看ArrayList源码,有如下困惑,希望得到大神们的解答。
在ArrayList源码中定义了两个一模一样的数据结构,如下:

private static final Object[] EMPTY_ELEMENTDATA = {};
private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};

官网给出的解释是这样子的:

private static final Object[] EMPTY_ELEMENTDATA = {};
Shared empty array instance used for empty instances.

而,另外一个:

private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};
Shared empty array instance used for default sized empty instances. We distinguish this from EMPTY_ELEMENTDATA to know how much to inflate when first element is added.

求解答啊,谢谢~~~
而且,本人吃惊的发现,DEFAULTCAPACITY_EMPTY_ELEMENTDATA 这个东西是JDK 1.8中才加进来的,我就更加神奇了,为什么JDK 1.8中要加入这个呢?

回答:

We distinguish this from EMPTY_ELEMENTDATA to know how much to inflate when first element is added.
我没读过源码, 但是我看到题主的注释里面有这么一句, 我们根据第一个元素被添加时知道多少个元素去填充把它与EMPTY_ELEMENTDATA区分开来.

回答:

我在mac下 jdk1.7的ArrayList源码里没有找到DEFAULTCAPACITY_EMPTY_ELEMENTDATA

不用太纠结这个了,我感觉是差不了多少的。1.8新版中DEFAULTCAPACITY_EMPTY_ELEMENTDATA和1.7中EMPTY_ELEMENTDATA作用差不多。new ArrayList() 时,1.8中this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA; 1.7中this.elementData = EMPTY_ELEMENTDATA,在添加第一个元素时,会扩容到10,都一个样。唯一区别就是在new Arraylist(0)时,1.8就直接this.elementData = EMPTY_ELEMENTDATA; 而1.7这些老一点版本就this.elementData = new Object[0];其他我觉得没区别了。

本文地址:H5W3 » ArrayList问题

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址