同步性:Vector 中的 public 方法多数添加了 synchronized 关键字、以确保方法同步、也即是 Vector 线程安全、ArrayList 线程不安全
性能:Vector 存在 synchronized 的锁等待情况、需要等待释放锁这个过程、所以性能相对较差
扩容大小:ArrayList在底层数组不够用时在原来的基础上扩展 0.5 倍 , Vector 默认是扩展 1 倍 扩容机制 , 扩容方法其实就是新创建一个数组 , 然后将旧数组的元素都复制到新数组里面 。 其底层的扩容方法都在grow() 中(基于JDK8)
- ArrayList 的 grow() , 在满足扩容条件时、ArrayList以1.5 倍的方式在扩容(oldCapacity >> 1 , 右移运算 , 相当于除以 2 , 结果为二分之一的 oldCapacity)
- Vector 的 grow() , Vector 比 ArrayList多一个属性 capacityIncrement , 可以指定扩容大小 。 当扩容容量增量大于 0 时、新数组长度为 原数组长度**+**扩容容量增量、否则新数组长度为原数组长度的 2 倍
ArrayList 与 LinkedList 区别
- 是否保证线程安全:ArrayList 和 LinkedList 都是不同步的 , 也就是不保证线程安全;
- 底层数据结构:Arraylist 底层使用的是 Object 数组;LinkedList 底层使用的是双向循环链表数据结构;
- 插入和删除是否受元素位置的影响:
- ArrayList 采用数组存储 , 所以插入和删除元素的时间复杂度受元素位置的影响 。 比如:执行 add(E e)方法的时候 ,ArrayList 会默认在将指定的元素追加到此列表的末尾 , 这种情况时间复杂度就是O(1) 。 但是如果要在指定位置 i 插入和删除元素的话( add(intindexE element))时间复杂度就为 O(n-i) 。 因为在进行上述操作的时候集合中第 i 和第 i 个元素之后的(n-i)个元素都要执行向后位/向前移一位的操作 。
- LinkedList 采用链表存储 , 所以插入 , 删除元素时间复杂度不受元素位置的影响 , 都是近似, 而数组为近似。
- ArrayList 一般应用于查询较多但插入以及删除较少情况 , 如果插入以及从删除较多则建议使用 LinkedList
- 是否支持快速随机访问:LinkedList 不支持高效的随机元素访问 , 而 ArrayList 实现了 RandomAccess 接口 , 所以有随机访问功能 。 快速随机访问就是通过元素的序号快速获取元素对象(对应于 get(intindex)方法) 。
- 内存空间占用:ArrayList 的空间浪费主要体现在在 list 列表的结尾会预留一定的容量空间 , 而 LinkedList 的空间花费则体现在它的每一个元素都需要消耗比 ArrayList 更多的空间(因为要存放直接后继和直接前驱以及数据) 。
高级工程师的我 , 可不得看看源码 , 具体分析下:
- ArrayList工作原理其实很简单 , 底层是动态数组 , 每次创建一个 ArrayList 实例时会分配一个初始容量(没有指定初始容量的话 , 默认是 10) , 以add方法为例 , 如果没有指定初始容量 , 当执行add方法 , 先判断当前数组是否为空 , 如果为空则给保存对象的数组分配一个最小容量 , 默认为10 。 当添加大容量元素时 , 会先增加数组的大小 , 以提高添加的效率;
- LinkedList 是有序并且支持元素重复的集合 , 底层是基于双向链表的 , 即每个节点既包含指向其后继的引用也包括指向其前驱的引用 。 链表无容量限制 , 但双向链表本身使用了更多空间 , 也需要额外的链表指针操作 。 按下标访问元素 get(i)/set(ie) 要悲剧的遍历链表将指针移动到位(如果i>数组大小的一半 , 会从末尾移起) 。 插入、删除元素时修改前后节点的指针即可 , 但还是要遍历部分链表的指针才能移动到下标所指的位置 , 只有在链表两头的操作add() ,addFirst() , removeLast()或用 iterator()上的 remove() 能省掉指针的移动 。 此外 LinkedList 还实现了 Deque(继承自Queue接口)接口 , 可以当做队列使用 。
推荐阅读
-
阿里巴巴|跟着马云20年,那个兢兢业业不肯辞职的前台小妹,现在怎么样了?
-
-
我曾是160斤胖女人,58次相亲失败,减重50斤后,被小8岁男友表白
-
-
「娱乐略知三四」这才是京城第一大富豪,他家的四合院紧挨着故宫,家具全是金丝楠木
-
「运动」没错!那些不动”的动作带来的泵感可以把你虐哭?
-
瓦妮莎@心酸!去世仅102天 38岁瓦妮莎像60岁 球迷:5次怀孕1次流产 太惨
-
紫陌红尘|芝芝怼魏亚云,《亲爱的自己》第42-43集预告:思雨怼王子茹
-
女生|“口臭”会越来越严重,再不改真没人要了女生常吃3种零食
-
军迷次元喵|结果让所有小国绝望,击沉一艘航母有多难?美军做了一次测试
-
-
杭州市民卡|免费!杭州这个地方为户外工作者提供凉茶!更多便民服务→
-
宝妈小厨8|女性长出“小胡子”,剃掉还是拔掉?学会三招,或能让你告别尴尬
-
坠楼身亡:四川一小区住户家中起火 男孩从起火房屋坠楼身亡
-
-
乐普医生|只因少了一个步骤,突发胸痛,阿司匹林帮倒忙
-
陈先生|“循环证明”没完没了,证明“我爸是我爸”为什么就这么难
-
明星八卦|“陈情令”演员撞衫,宣璐和杨幂穿同款,孟子义撞上娜扎,于斌这个意外了!
-
-
#小米科技#一加8Pro对比小米10Pro, 谁更适合作为你的旗舰手机?