博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
集合源码研究—ArrayList
阅读量:7093 次
发布时间:2019-06-28

本文共 1043 字,大约阅读时间需要 3 分钟。

hot3.png

       昨天在微信公众号看到了一篇文章,题目是“你真的会写java代码吗?”,文章大概意思是说很多程序员过于注重系统的业务,而忽略了写代码的能力。文章最后出了一个题目,自己写一个有ArrayList功能的类,作者说他们公司的很多程序员居然写不出来。我们平常工作中,ArrayList是我们经常使用的一个集合类,于是我有了兴趣,花了10分钟简单实现了一下,测试了下,也确实可以做到增删查改,代码比较粗糙,这里就不贴了,有兴趣的同学可以自己实现看看。

        我一直有一颗爱好学习的心态,看了下自己写的代码,想研究下ArrayList源码是怎么写的。

        下图是ArrayList类继承的类和实现的接口。

144106_gLN5_3340040.png

        所以,ArrayList具有以下特点:

1、因为实现了RandomAccess接口,所以查询速度快,遍历时,第一种方式快于第二种方式。

第一种方式:        for (int i = 0; i < list.size(); i++) {

                                list.get(i);
                            }

第二种方式:        Iterator<String> iterator = list.iterator();

                            while (iterator.hasNext()) {
                                iterator.next();
                            }

2、ArrayList内部存储原理是用一个数组来存储元素,这个数组的对象名是elementData。

(1)顺序添加一个元素,速度比较快。例如elementData目前size是6,新增一个元素,值为100,则elementData[6] = 100,当然,这里省略了一些类似数组越界的判断。

(2)插入一个元素,则会比较耗费性能。例如elementData现在有6个元素,需要在第2和第3个元素中间插入一个元素,那么得先将第3到第6个元素都往后移动,然后再进行插入操作。

(3)删除一个元素,也会比较耗费性能。例如elementData现在有6个元素,需要删除第2个元素,那么删除之后第3到第6个元素都需要往前移动。

        ArrayList能够存多少元素?

第一次往ArrayList放置元素,elementData数组大小初始化为10,如果下一次元素放置满了,会以1.5倍的容量增长,最大容量为int类型的最大值。

容量增长源码中是这样写的:int newCapacity = oldCapacity + (oldCapacity >> 1);

转载于:https://my.oschina.net/huangyuewu/blog/878865

你可能感兴趣的文章
Ubuntu添加自定义快捷方式
查看>>
mysql 基本操作
查看>>
我的友情链接
查看>>
Xcode 使用Git User Interface State 问题
查看>>
我在群硕实习的日子
查看>>
个人知识管理是职场必修课
查看>>
基于 Android NDK 的学习之旅----- C调用Java(附源码)
查看>>
Python主流IDE对比:Eric VS. PyCharm
查看>>
alchim31压缩js和css文件
查看>>
J2EE 之二------------------- Servlet
查看>>
python argparse
查看>>
美团客户端响应式框架 EasyReact 开源啦
查看>>
前有BAT,后出独角兽,第二梯队很焦虑
查看>>
煲仔饭与软件测试
查看>>
ORACLE同义词总结
查看>>
在linux下安装android以及C/C++开发环境
查看>>
分享:【视频:淘宝手机生活节测试分享】
查看>>
idea maven 新建多模块项目
查看>>
Sqlserver 过期
查看>>
vs2013新建文件自动保存为utf-8编码
查看>>