首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

ArrayList

因为我们在使用ArrayList的时候一般不会设置初始值的大小,那ArrayList默认的大小就刚好是10。 ?...ArrayList(int initialCapacity)会不会初始化数组大小? 这是什么问题?卧槽问个ArrayList还能问到知识盲区? ?...而且将构造函数与initialCapacity结合使用,然后使用set()会抛出异常,尽管该数组已创建,但是大小设置不正确。...使用sureCapacity()也不起作用,因为它基于elementData数组而不是大小。 还有其他副作用,这是因为带有sureCapacity()的静态DEFAULT_CAPACITY。...ArrayList用来做队列合适么? 队列一般是FIFO(先入先出)的,如果用ArrayList做队列,就需要在数组尾部追加数据,数组头部删除数组,反过来也可以。

73120
您找到你想要的搜索结果了吗?
是的
没有找到

arraylist扩容是创建新数组吗 java_arraylist扩容机制要怎么实现?arraylist怎么扩容…「建议收藏」

ArrayList大家都知道了吧,这是一个动态数组。以java语言来说,数组是定长的,在被创建之后就不能被加长或缩短了,因此,了解它的扩容机制对使用它尤为重要。...首先我们知道,ArrayList有着三种初始化方式: 1)指定大小初始化public ArrayList(int initialCapacity) 2)传入一个Collection对象初始化,并将对象中的数据添加到...ArrayList中public ArrayList(Collection c) 3)默认构造函数初始化public ArrayList() ArrayList扩容机制发生在add()方法调用的时候,从下面的代码我们可以看出当使用无参构造函数创建...ArrayList时,它的默认长度会为0private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {}; public ArrayList...elementData.length; // 扩容至原来的1.5倍 int newCapacity = oldCapacity + (oldCapacity >> 1); // 再判断一下新数组的容量够不够,够了就直接使用这个长度创建新数组

48510

聊聊ArrayList源码(基于JDK1.8)

ArrayList中,我们即可以通过元素的序号快速获取元素对象;这就是快速随机访问。 ArrayList 实现了Cloneable接口,即覆盖了函数clone(),能被克隆。...ArrayList 实现java.io.Serializable接口,这意味着ArrayList支持序列化,能通过序列化去传输,包括网络传输与本地文件序列化。..., int newLength) { return (T[]) copyOf(original, newLength, original.getClass()); } 很明显调用了另一个...Math.min(original.length, newLength)); return copy; } 从代码里面可以看出,copyOf方法实际上是在其内部又创建了一个长度为...4、ArrayList基于数组实现,可以通过下标索引直接查找到指定位置的元素,因此查找效率高,但每次插入或删除元素,就要大量地移动元素,插入删除元素的效率低。

33440

ArrayList详解

查询元素的速度快,由于底层数据结构是基于 Object 数组实现的。而数组在内存中是一块连续空间,因此可以根据地址 + 索引的方式快速获取对应位置上的元素。...默认的空参构造方法 在网上看过一些博文在介绍 ArrayList 空参构造方法时,通常会这么写道,“当调用该空参构造函数时,会创建一个容量为 10 的数组”。...为了验证这种说法,我们可以看看基于 jdk 1.8(201) 的 ArrayList 源码: public ArrayList() { this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA...而在 jdk 1.7 后,ArrayList 的空参构造方法为了避免无用内存占用,仅仅只是创建了一个底层数据结构长度为 0 的空数组。**只有在初次添加元素时才将容量扩容为 10。...* 不管三元运算符结果如何,都会创建一个新的数组。

21430

ArrayList实现原理分析(Java源码剖析)ArrayList使用的存储的数据结构ArrayList的初始化ArrayList是如何动态增长ArrayList如何实现元素的移除ArrayList

ArrayList使用的存储的数据结构 ArrayList的初始化 ArrayList是如何动态增长 ArrayList如何实现元素的移除 ArrayList小结 ArrayList是我们经常使用的一个数据结构...,我们通常把其用作一个可变长度的动态数组使用,大部分时候,可以替代数组的作用,我们不用事先设定ArrayList的长度,只需要往里不断添加元素即可,ArrayList会动态增加容量。...ArrayList是作为List接口的一个实现。 那么ArrayList背后使用的数据结构是什么呢? ArrayList是如何保证动态增加容量,使得能够正确添加元素的呢?...ArrayList的初始化 ArrayList提供了三个构造函数。...ArrayList小结 ArrayList是List接口的一个可变大小的数组的实现 ArrayList的内部是使用一个Object对象数组来存储元素的 初始化ArrayList的时候,可以指定初始化容量的大小

1.6K30

ArrayList扩容机制(基于jdk1.8)

一.ArrayList继承了AbstractList,实现了List接口,底层实现基于数组,因此可以认为是一个可变长度的数组。...二.在讲扩容机制之前,我们需要了解一下ArrayList中最主要的几个变量: //定义一个空数组以供使用 private static final Object[] EMPTY_ELEMENTDATA...; } 可以看到,调用此构造函数,返回了一个空的数组DEFAULTCAPACITY_EMPTY_ELEMENTDATA,此数组长度为0. 2.给定初始容量的构造函数 public ArrayList(...所以,若创建ArrayList时调用的是无参构造,此方法会返回DEFAULT_CAPACITY(值为10)和minCapacity的最大值,因此,最终会返回固定值10;若创建ArrayList时调用了有参构造...可能说的太啰嗦,通俗来讲,就是如果ArrayList给定了特定初始容量,则此处需要根据实际情况确定是否调用grow方法,即有可能不需要扩容。

45710
领券