首页 » 网站建设 » php数组转arraylist技巧_ArrayList底层数组扩容事理 Java那些事儿

php数组转arraylist技巧_ArrayList底层数组扩容事理 Java那些事儿

duote123 2024-12-07 0

扫一扫用手机浏览

文章目录 [+]

1、ArrayList初始化-Java那些事儿

2、ArrayList底层数组扩容事理 - Java那些事儿

php数组转arraylist技巧_ArrayList底层数组扩容事理  Java那些事儿

3、韶光繁芜度 - Java那些事儿

php数组转arraylist技巧_ArrayList底层数组扩容事理  Java那些事儿
(图片来自网络侵删)

4、三顾ArrayList - Java那些事儿

5、ArrayList的韶光繁芜度 - Java那些事儿

再次强调,ArrayList是一个普通的类,如果我们愉快,可以自己写一个

ArrayList初始化-Java那些事儿 一文揭橥后,有人私信问我

我们先回顾一下之前的所说过的数组,话不多说,上代码:

老例子,我们连续画一画,加深一下印象,上图:

这个图我们去掉了 ArrayList初始化-Java那些事儿 一文图里那些无用的细节(方法区,常量池等),方便大家看起来清晰,我们用eclipse的debug功能看一下,看是否与我们图上画的同等

再看一下实行结果,也在我们期望中

好,我们改一下代码,再往数组里加添加一个叫“周八”的person工具

实行一下

看到了传说的中数组下标越界非常。
在Java中,数组一但在堆内存中创建,长度是固定的。

既然是固定的,那我们要往数组里加一个“周八”用户怎么办?没办法,只能重新new长一点的新的数组,把原来数组的元素复制过去,好吧,开始写代码吧,相信大家都会写

把老数组的元素循环一下,赋值给新的数组,很大略也很清晰。
debug看一下

“周八”已经有了。
以上代码虽然大略,但还不是最优雅的,老鸟一样平常会这么写,该段代码实行结果和上面那段代码一样

再画个图加深一下印象吧:

此图已用尽我洪荒之力,希望大家往后多想想工具在堆内存中的样子。
不枉我一片苦心呀。
看到System.arraycopy()方法是不是似曾相识呢?我们在 ArrayList初始化-Java那些事儿 一文中提了一下,相信看到这里,大家都知道ArrayList里的底层数组扩容是怎么实现的了吧。
在 ArrayList初始化-Java那些事儿 一文中,我们知道当ArrayList如果不指定布局个数的话,第一次往里面添加元素时底层数组会初始化一个长度为10的数组,我们再回顾一下昨天的源码,再来看一下ArrayList里的源码,当添加第11个元素时

再看grow()方法

这儿有一段代码:int newCapacity = oldCapacity + (oldCapacity >> 1),>>是移位运算符,相称于int newCapacity = oldCapacity + (oldCapacity/2),但性能会好一些

本文开始那个问题,到这儿就办理了,这便是数组的扩容,一样平常是oldCapacity + (oldCapacity >> 1),相称于扩容1.5倍

我们再看一下源码,好大略:

当我们在写代码过程中,如果我们大概知道元素的个数,比如一个班级大概有40-50人,我们优先考虑List<Person> list2 = new ArrayList<>(50)以指定个数的办法去布局,这样可以避免底层数组的多次拷贝,进而提高程序性能。

如果喜好本系列文章,请为我点赞或顺手分享,您的支持是我连续下去的动力,您也可以在评论区留言想理解的内容,有机会本专栏会做讲解,末了别忘了关注一下我

上一篇: ArrayList初始化-Java那些事儿

相关文章

phpodbc中文技巧_PHP 数据库 ODBC

创建 ODBC 连接通过一个 ODBC 连接,您可以连接到您的网络中的任何打算机上的任何数据库,只要 ODBC 连接是可用的。这是...

网站建设 2024-12-09 阅读0 评论0