资讯专栏INFORMATION COLUMN

ArrayList常见问题

keithxiaoy / 269人阅读

摘要:常见问题汇总的默认初始长度是多少最大长度是多少的默认初始长度是,是由设定的。这里需要注意常量并不是真正的最大长度,原因可以参考方法。特殊情况是存在长度超过的最大支持长度则调用进行特殊处理防止数组超出最大长度最大值。

简介

ArrayList使用Object数组存储数组元素,并使用size属性记录数组长度

需要注意ArrayList非线程安全的。

常见问题汇总

ArrayList的默认初始长度是多少?最大长度是多少?

ArrayList的默认初始长度是10,是由DEFAULT_CAPACITY设定的。

由于ArrayList底层是用Object数组存储元素,所以ArrayList最大长度为Integer.MAX_VALUE,即2147483647(2)。这里需要注意常量MAX_ARRAY_SIZE(Integer.MAX_VALUE - 8)并不是ArrayList真正的最大长度,原因可以参考hugeCapacity()方法。

ArrayList是如何扩容的?

扩容发生在插入数组元素时(关键方法为grow()方法)

先计算增加完新元素后的ArrayList长度size

然后sizeminCapacity比较来判断是否需要扩容

扩容时一般扩容为新数组长度newCapacity为原数组长度oldCapacity1.5倍(oldCapacity带符号右移1位并加上oldCapacity)。

特殊情况是存在newCapacity长度超过Array的最大支持长度MAX_ARRAY_SIZE则调用hugeCapacity()进行特殊处理防止数组超出最大长度(int最大值)。

ArrayList扩容后是否会自动缩容?如果不能怎样进行缩容?

ArrayList只能自动扩容,不能自动缩容。如果需要进行缩容,可以调用ArrayList提供的trimToSize()方法。

ArrayList底层数组扩容时是如何保证高效复制数组的?

表面上是调用Arrays.copyOf()方法,实际上是Arrays.copyOf()通过调用System.arraycopy()方法确保高效复制数组。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/73796.html

相关文章

  • 最详细的Collections类和Arrays类常见方法复习

    摘要:类比根据定制排序,返回最大元素,排序规则由类控制。返回指定支持的同步线程安全的。将返回的列表更改为写入数组。字符串表示由数组元素的列表组成,括在方括号中。 1. Collections类的常见操作: 1.1. 排序操作: 集合类库使用的是归并排序比快速排序要慢一些,快速排序是通用排序算法的传统选择。但是,归并排序有一个主要的优点就是稳定。 void reverse(List list)...

    Jason_Geng 评论0 收藏0
  • Java中ArrayList的对象引用问题

    摘要:既然的构造方法是复制新的数组,那么是为什么呢这里提前透露一下结论数组元素为对象时,实际上存储的是对象的引用,进行数组复制也只是复制了对象的引用。即数组元素为对象时,实际上存储的是对象的引用。 前言 事件起因是由于同事使用ArrayList的带参构造方法进行ArrayList对象复制,修改新的ArrayList对象中的元素(对象)的成员变量时也会修改原ArrayList中的元素(对象)的...

    h9911 评论0 收藏0
  • 教妹学 Java:晦涩难懂的泛型

    摘要:首先,我们来按照泛型的标准重新设计一下类。注意参数为而不是泛型。利用形式的通配符,可以实现泛型的向上转型,来看例子。需要注意的是,无法从这样类型的中取出数据。showImg(https://user-gold-cdn.xitu.io/2019/5/17/16ac3bf3eb16160c); 00、故事的起源 二哥,要不我上大学的时候也学习编程吧?有一天,三妹突发奇想地问我。 你确定要做一名...

    Crazy_Coder 评论0 收藏0
  • 常见的集合容器应当避免的坑

    摘要:尽可能避免使用,会导致复制数组,降低效率。再额外提一点,我们常用的另一个容器也是推荐要初始化长度从而避免扩容。 showImg(https://segmentfault.com/img/remote/1460000019659723); 前言 前不久帮同事一起 review 一个 job 执行缓慢的问题时发现不少朋友在撸码实现功能时还是有需要细节不够注意,于是便有了这篇文章。 Arra...

    GraphQuery 评论0 收藏0
  • 数组和列表的转换问题

    摘要:以下指代数组,指代数组列表。常见的转换方法是或。在的使用过程中需要注意,当要转换的长度小于的时,不要试图通过传入形参的方式进行转换,虽然这在的长度大于时不会出现问题。所以,极度建议在转换之前初始化的长度为的,并且使用返回值重新给赋值。 Array 和 List 都是我们在开发过程中常见的数据结构。我们都知道 Array 是定长的,List 是可变长。而且,List 的实现类 Array...

    ChristmasBoy 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<