首页
题库
面试
求职
学习
竞赛
More+
所有博客
搜索面经/职位/试题/公司
搜索
我要招人
去企业版
登录 / 注册
首页
>
试题广场
>
说说你对ArrayList的理解
[问答题]
说说你对ArrayList的理解
添加笔记
求解答(0)
邀请回答
收藏(339)
分享
纠错
55个回答
添加回答
50
大哥们不要卷我
arraylist在jdk7.0的时候,创建容器的时候会在底层创建一个长度为10的object数组,在jdk8.0的时候,在创建容器的时候底层并不会立刻创建,只有在第一次调用add方法的时候才会创建一个长度为10的数组,默认情况下,扩容为原来容量的1.5倍,同时将原有数组中的值复制到新的数组中,并且arraylist属于有序的,可重复的集合,提供了iterator方法,增强了迭代能力。
发表于 2022-06-10 13:03:55
回复(0)
22
香鸭蛋
arrayList默认容量是10,按1.5倍扩容。
发表于 2022-05-10 20:36:46
回复(2)
10
老代还年轻
ArrayList 底层是用Object数组实现的,通过默认构造器创建容器时,首先会初始化为一个空数组,然后在第一次添加元素时创建大小为10的数组,超出限制会增加50%的容量,并且数据以System.arraycopy()复制到新数组,当然也可以指定初始容量。如果一次添加多个元素,如addAll,如果添加元素的个数大于默认扩容的长度,则会使用两者中最大的作为扩容后的容量
发表于 2022-06-24 09:28:07
回复(0)
4
梦崽
ArrayList是一个有序可重复的容器,他的底层是数组,根据数组索引查找元素,所以查询快。增删因为要移动元素位置,所以增删慢,线程是不安全的。 ArrayList的自动扩容,当容快满的时候,他会新建一个为当前1.5倍的容器,把原有的数据拷贝过来。
发表于 2022-11-14 15:56:12
回复(0)
4
Farewell*
arraylist底层是用动态对象数组来实现的,它的默认构造函数是创建一个初始容量为10的数组,发生扩容时以当前容量的1.5北来扩容
发表于 2022-09-13 16:06:58
回复(0)
3
黄俊忠
arraylist是线程不安全的,使用动态扩容,初始值是0,在第一次调用add方法才会创建一个大小为10的数组。按照源码的grow方法默认扩容是1.5倍,然后使用arraycopy方法进行拷贝。arraylist的底层是数组,arraylist容易遍历,但是经过底层copyof方法的优化后,arraylist的增删并不逊色于linkedlist,由于增加大多数在数组末端,增加元素的时间复杂度是O(1)
发表于 2022-09-03 11:09:59
回复(0)
2
浪仙_
ArrayList底层是基于数组自动扩容实现的,提供了三个构造器,空参构造器会创建一个容量为0的数组,还可以传入指定大小容量,或者传入一个collection集合的对象,它就会使用这个对象的大小作为这个容量,当第一次调用add方法的时候,第一次扩容为10,后续都是原容量的1.5倍,如果是addAll方法,在没有元素的情况下,ArrayList会取这个,10和添加的collection对象大小的最大值,作为这个扩容的容量,有元素的情况下,会取原容量的1.5倍和添加的collection对象大小的最大值,作为这个扩容的容量。扩容的时候就是会创建一个新的数组,拷贝之后,把引用指向给新的数组。
发表于 2022-12-26 21:21:30
回复(0)
1
纯真的傻狍子前程似锦
ArrayList是一个Java容器,在jdk1.8之前,创建容器的时候会默认初始化成长度为10的数组。jdk1.8之后,创建容器之后数组初始化为空,只有在使用add方法之后才会增加10容量。当数组容量不够用的时候,数组会自动扩容,扩容后的数组长度为原来的1.5倍,扩容的本质是数组的拷贝。
发表于 2023-09-21 17:18:36
回复(0)
1
自信的大白菜
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)
1
程序员小丑
底层是一个Object[]的数组,刚创建的时候是一个空的集合,首次添加数据的时候会初始化长度为10的数组,当数据达到限制时,会按原长度的1,5倍进行扩容
发表于 2023-01-31 14:26:19
回复(0)
1
别打小书包唉
ArrayList:ArrayList的底层是用Object数组实现的,通过默认构造器创建容器时,首先会初始化一个空数组,然后在第一次添加元素的时候创建一个大小为10的数组,超出限制后会增加50%的容量,并且数据以System.arraycopy()复制到新数组,当然也可以指定初始容量。如果一次添加多个元素,如addAll,如果添加元素的个数大于默认扩容的长度,则会使用两者中最大的作为扩容后的容量。
发表于 2022-07-22 13:57:35
回复(0)
1
吴红古
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)
0
佩奇大大
arraylist默认是0,add的时候会按1.5被扩容
编辑于 2024-04-03 13:15:43
回复(0)
0
钟情于风TuT
ArrayList是集合Collection的一种,它的底层是数组,在1.8之前它是直接创建一个长度为10的数组,在1.8之后不会立刻创建出来,而是在第一次put的时候才会进行创建,它的扩容机制是变为原来的1.5倍,线程是不安全的,当在多线程同时访问的情况下可能会发生并发修改异常MotificationException,它适用于查找比较多的
发表于 2024-04-02 16:13:15
回复(0)
0
牛客380258662号
ArrayList 父接口是Conllection 底层实现:数组、线程不安全、 扩容机制:1.5倍 初始值为10 有序、可重复 在java1.8 之前,会直接创建一个长度为10的数组 之后,默认为0,进行第一次add是扩容为长度为10的数组
编辑于 2024-03-16 11:07:38
回复(0)
0
有礼貌的代码渣渣bbq了
编辑于 2024-03-08 09:44:18
回复(0)
0
说我这儿没问题啊的林北很爱刷美剧
ArrayList 是线程不安全的 是基于动态数组实现的 初始化容量是10 扩容的时候为原来的1.5被
编辑于 2024-03-05 17:53:44
回复(0)
0
在备战秋招的靓仔很聪敏
arraylist的底层是用一个有序动态数组实现的,因为是根据下标来进行查询的,所以查询快,增加和删除会慢,当容量快满的时候会自动进行扩容1.5倍
编辑于 2024-03-04 11:11:11
回复(0)
0
非常凡想
基于动态数组,连续内存存储,适合下标访问(随机访问), 扩容机制:因为数组长度固定,超出长度存数据时需要新建数组,然后将老数组的数据拷贝到新数组,如果不是尾部插入数据还会涉及到元素的移动(往后复制一份,插入新元素),使用尾插法并指定初始容量可以极大提升性能、甚至超过LinkedList(需要创建大量的node对象)。
发表于 2023-12-08 17:42:17
回复(0)
0
牛客613278630号
1 动态扩容数组 2 如果可以预估大小,建议设定好大小,可以减少扩容,浪费时间 3. 默认大小16,扩容2倍 4 不是线程安全
发表于 2023-11-29 16:09:12
回复(0)
这道题你会答吗?花几分钟告诉大家答案吧!
提交观点
问题信息
Java
上传者:
real19931
难度:
55条回答
339收藏
1233浏览
热门推荐
相关试题
假定一个待哈希存储的线性表为(32...
哈希
评论
(1)
5.下列判断正确的是( )
资料分析
言语理解与表达
资料分析
评论
(1)
《拳皇97》最后BOSS是谁?
游戏常识
评论
(1)
《魔兽世界》中,下列不属于玩家可以...
游戏常识
评论
(1)
你有没有崇拜的偶像,你欣赏他/她身...
通用能力
评论
(1)
扫描二维码,关注牛客网
意见反馈
下载牛客APP,随时随地刷题