A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 陈山 中级黑马   /  2012-11-24 18:54  /  2264 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 陈山 于 2012-11-25 21:10 编辑

大家都知道ArrayList的底层数据结构是数组的,数组的长度是不可改变的,但是ArrayList的大小却是可以改变的,为什么会这样呢?

8 个回复

倒序浏览
ArrayList底层的数据结构使用的是数组结构。它默认长度是10,但可以50%延长。

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 赞一个!

查看全部评分

回复 使用道具 举报
楼主说的没错,ArrayList的底层是数组结构的,并且分配好的长度是不能改变的,并且ArrayList默认的情况下,系统分配的长度是10,当超过这个长度时,系统会重新分配一个新的ArrayList,长度是15,ArrayList是按照50%增加的,它会把数组中以前的元素拷贝到新数组中,再把新元素添加近来,这些操作是由jvm来完成,不用自己写程序实现的.

点评

这个是对的 毕老师的视频里面讲的很清楚 建议视频要认真看  发表于 2012-11-25 12:27

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 赞一个!

查看全部评分

回复 使用道具 举报
ArrayList的大小改变时,底层也会根据这个大小值判断是否再创建一个新的足够长的数组存放数据

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
新建的ArrayList会分配一定的内存,当元素多到不能再增加元素时,再分配更多的空间。
当你的ArrayList对象需要的空间比较大时,可以使用ensureCapacity获取分配空间,提高效率。这样可以大大提高初始化速度。

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
rrayList在没有大小指定的构造方法下,它们的空间默认个数是10个,那么放入第11个元素时,ArrayList会增加原来空间的一半,之后若空间还不够就按50%的递增了
回复 使用道具 举报
底层数据结构还是数组的,如果超出默认的空间会按照其空间的一半进行递增
回复 使用道具 举报
本帖最后由 yzqiong5566 于 2012-11-24 23:59 编辑

        ArrayList的列表对象实质上是存储在一个引用型数组里的,有人认为该数组有“自动增长机制”可以自动改变size大小。正式地说,该数组是无法改变大小的,实际上它只是改变了该引用型数组的指向而已。
        ArrayList底层采用Object类型的数组实现,当使用不带参数的构造方法生成ArrayList对象时,实际上会在底层生成一个长度为10的Object类型数组。在用户向ArrayList追加对象时,Java总是要先计算容量(Capacity)是否适当,若容量不足则把原数组拷贝到以指定容量为长度创建的新数组内,并对原数组变量重新赋值,指向新数组。在这同时,size进行自增1。在删除对象时,先使用拷贝方法把指定index后面的对象前移1位(如果有的话),然后把空出来的位置置null,交给Junk收集器销毁,size自减1,即完成了。

评分

参与人数 1技术分 +1 收起 理由
杨千里 + 1

查看全部评分

回复 使用道具 举报
jerry2627 来自手机 中级黑马 2012-11-25 00:15:03
9#
底层结构是动态数组
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马