首页 > 试题广场 >

说说你对ArrayList的理解

[问答题]
arraylist在jdk7.0的时候,创建容器的时候会在底层创建一个长度为10的object数组,在jdk8.0的时候,在创建容器的时候底层并不会立刻创建,只有在第一次调用add方法的时候才会创建一个长度为10的数组,默认情况下,扩容为原来容量的1.5倍,同时将原有数组中的值复制到新的数组中,并且arraylist属于有序的,可重复的集合,提供了iterator方法,增强了迭代能力。
发表于 2022-06-10 13:03:55 回复(0)
arrayList默认容量是10,按1.5倍扩容。
发表于 2022-05-10 20:36:46 回复(2)
ArrayList 底层是用Object数组实现的,通过默认构造器创建容器时,首先会初始化为一个空数组,然后在第一次添加元素时创建大小为10的数组,超出限制会增加50%的容量,并且数据以System.arraycopy()复制到新数组,当然也可以指定初始容量。如果一次添加多个元素,如addAll,如果添加元素的个数大于默认扩容的长度,则会使用两者中最大的作为扩容后的容量
发表于 2022-06-24 09:28:07 回复(0)
ArrayList是一个有序可重复的容器,他的底层是数组,根据数组索引查找元素,所以查询快。增删因为要移动元素位置,所以增删慢,线程是不安全的。 ArrayList的自动扩容,当容快满的时候,他会新建一个为当前1.5倍的容器,把原有的数据拷贝过来。
发表于 2022-11-14 15:56:12 回复(0)
arraylist底层是用动态对象数组来实现的,它的默认构造函数是创建一个初始容量为10的数组,发生扩容时以当前容量的1.5北来扩容
发表于 2022-09-13 16:06:58 回复(0)
arraylist是线程不安全的,使用动态扩容,初始值是0,在第一次调用add方法才会创建一个大小为10的数组。按照源码的grow方法默认扩容是1.5倍,然后使用arraycopy方法进行拷贝。arraylist的底层是数组,arraylist容易遍历,但是经过底层copyof方法的优化后,arraylist的增删并不逊色于linkedlist,由于增加大多数在数组末端,增加元素的时间复杂度是O(1)
发表于 2022-09-03 11:09:59 回复(0)
ArrayList底层是基于数组自动扩容实现的,提供了三个构造器,空参构造器会创建一个容量为0的数组,还可以传入指定大小容量,或者传入一个collection集合的对象,它就会使用这个对象的大小作为这个容量,当第一次调用add方法的时候,第一次扩容为10,后续都是原容量的1.5倍,如果是addAll方法,在没有元素的情况下,ArrayList会取这个,10和添加的collection对象大小的最大值,作为这个扩容的容量,有元素的情况下,会取原容量的1.5倍和添加的collection对象大小的最大值,作为这个扩容的容量。扩容的时候就是会创建一个新的数组,拷贝之后,把引用指向给新的数组。
发表于 2022-12-26 21:21:30 回复(0)
ArrayList是一个Java容器,在jdk1.8之前,创建容器的时候会默认初始化成长度为10的数组。jdk1.8之后,创建容器之后数组初始化为空,只有在使用add方法之后才会增加10容量。当数组容量不够用的时候,数组会自动扩容,扩容后的数组长度为原来的1.5倍,扩容的本质是数组的拷贝。
发表于 2023-09-21 17:18:36 回复(0)
1.arraylist在jdk7.0的时候,创建容器的时候会在底层创建一个长度为10的object数组

2.在jdk8.0的时候,在创建容器的时候底层并不会立刻创建,只有在第一次调用add方法的时候才会创建一个长度为10的数组,超出限制会扩容为上次容量的1.5倍

3.如果一次添加多个元素,如addAll,如果添加元素的个数大于默认扩容的长度,则会使用两者中最大的作为扩容后的容量

4.arraylist属于有序的,可重复的集合,提供了iterator方法,增强了迭代能力

5.ArrayList与LinkedList二者都是线程不安全的.

6.LinkedList是双向链表,节点之间通过指针联系起来,内存空间不连续,不支持随机访问,但是ArrayList由于内存空间连续,因此支持随机访问。

如果调用add()无参添加元素,二者的时间复杂度都是O(1),如果调用add(i)指定位置,ArrayList的时间复杂度为O(i),且插入元素涉及到后续元素的移动,但是LinkedList的时间复杂度为O(1),因为只需要断开前驱和后继然后加入新节点即可。

发表于 2023-02-25 09:43:17 回复(0)
底层是一个Object[]的数组,刚创建的时候是一个空的集合,首次添加数据的时候会初始化长度为10的数组,当数据达到限制时,会按原长度的1,5倍进行扩容
发表于 2023-01-31 14:26:19 回复(0)
ArrayList:ArrayList的底层是用Object数组实现的,通过默认构造器创建容器时,首先会初始化一个空数组,然后在第一次添加元素的时候创建一个大小为10的数组,超出限制后会增加50%的容量,并且数据以System.arraycopy()复制到新数组,当然也可以指定初始容量。如果一次添加多个元素,如addAll,如果添加元素的个数大于默认扩容的长度,则会使用两者中最大的作为扩容后的容量。
发表于 2022-07-22 13:57:35 回复(0)
ArrayList在jdk8时创建分三种情况: 1.new ArrayList()不传参默认长度为0;2.new ArrayList(int intialCapacity)使用指定容量的数组;3.ArrayList(Collection c)会使用c的大小作为数组容量 add时首次扩容为10,再次扩容为上次容量的1.5倍
发表于 2022-07-06 09:54:52 回复(0)
arraylist默认是0,add的时候会按1.5被扩容
编辑于 2024-04-03 13:15:43 回复(0)
ArrayList是集合Collection的一种,它的底层是数组,在1.8之前它是直接创建一个长度为10的数组,在1.8之后不会立刻创建出来,而是在第一次put的时候才会进行创建,它的扩容机制是变为原来的1.5倍,线程是不安全的,当在多线程同时访问的情况下可能会发生并发修改异常MotificationException,它适用于查找比较多的
发表于 2024-04-02 16:13:15 回复(0)
ArrayList 父接口是Conllection 底层实现:数组、线程不安全、 扩容机制:1.5倍 初始值为10 有序、可重复 在java1.8 之前,会直接创建一个长度为10的数组 之后,默认为0,进行第一次add是扩容为长度为10的数组
编辑于 2024-03-16 11:07:38 回复(0)
编辑于 2024-03-08 09:44:18 回复(0)
ArrayList 是线程不安全的 是基于动态数组实现的 初始化容量是10 扩容的时候为原来的1.5被
编辑于 2024-03-05 17:53:44 回复(0)
arraylist的底层是用一个有序动态数组实现的,因为是根据下标来进行查询的,所以查询快,增加和删除会慢,当容量快满的时候会自动进行扩容1.5倍
编辑于 2024-03-04 11:11:11 回复(0)
基于动态数组,连续内存存储,适合下标访问(随机访问), 扩容机制:因为数组长度固定,超出长度存数据时需要新建数组,然后将老数组的数据拷贝到新数组,如果不是尾部插入数据还会涉及到元素的移动(往后复制一份,插入新元素),使用尾插法并指定初始容量可以极大提升性能、甚至超过LinkedList(需要创建大量的node对象)。
发表于 2023-12-08 17:42:17 回复(0)
1 动态扩容数组 2 如果可以预估大小,建议设定好大小,可以减少扩容,浪费时间 3. 默认大小16,扩容2倍 4 不是线程安全
发表于 2023-11-29 16:09:12 回复(0)