一行一行读Java源码——ArrayList

  • 时间:
  • 浏览:0

6、ArrayList怎么序列化?

通过readObject和writeObject,详见集合序列化

ensureCapacityInternal法律方法

ArrayList可能性是日常开发中使用频率最高的集合类型之一(从前 是HashMap),之前 某些细节不细究、不常回顾语录老是 会慢慢模糊,比如有一语录List<Object> objects = new ArrayList<>(); ,试问此时objects 的容量(capacity)是多大?

尽管例如从前 的细节对代码质量的影响可能性不大,但作为Java线程池池员大伙还是有必要去熟悉哪些地方地方细节并挖掘隐含在哪些地方地方细节面前的设计奥秘。鉴于此,我觉得有必要再次细度Java ArrayList源码。

首先列举一下本文所涉及的知识点:

1、ArrayList内内外部怎么实现?适合哪些地方样的操作场景?

2、new ArrayList<>()法律方法调用后所提供的ArrayList容量是多大?

3、未提供容量值,之前 调用add法律方法后ArrayList容量值是多大?

4、ArrayList哪些地方之前 扩容?怎么扩容?扩多大?

5、ArrayList与否线程池池安全?

6、ArrayList怎么序列化?

7、ArrayList最大容量是多大?

为哪些地方ArrayList会采用你这一个多法律方法来完成序列化与反序列化,见Java集合序列化

3、未提供容量值,之前 调用add法律方法后ArrayList容量值是多大?

共却说10,可能性实际还要值(大于10)

4、ArrayList哪些地方之前 扩容?怎么扩容?扩多大?

当前还要的容量要比当前ArrayList的capacity大时进行扩容;扩容的操作是重新分配数组;共要会扩容 1/2 oldCapacity(向下取整),可能性newCapacity小于共要还要的容量minCapacity,那将扩大至共要还要容量。

再来看add法律方法

数组是顺序表,这意味ArrayList不适合在非尾部插入和删除

2、new ArrayList<>()法律方法调用后所提供的ArrayList容量是多大?

0

1、ArrayList内内外部怎么实现?适合哪些地方样的操作场景?

数组实现,适合随机存取、不适合非尾部的增删操作。

5、ArrayList与否线程池池安全?

全是,没人任何synchronized法律方法。

7、ArrayList最大容量是多大?

Integer.MAX_VALUE - 8,帕累托图虚拟机在数组中预留了8位存储头部信息。