同步性: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接口)接口 , 可以当做队列使用 。
推荐阅读
-
Score赛高:韩网友评席位变化:近年除T1还有进四强的?
-
房价涨幅|72.97%!这个“默默无闻”的省会城市,3年来房价涨幅全国第一
-
冠军|英国跳水名将戴利看台上为狗织毛衣走红:还为金牌织了毛线袋
-
-
菜谱365@成功率百分之百,芒果西米露怎么做:奶茶店老师傅说撑握这个方法
-
-
像梦一样奔驰|横测这五款真无线蓝牙耳机,百元级中谁才是更强者?
-
星座听语|曙光再现,爱意未散,表明心意,姻缘重启,找回一生伴侣,10月
-
辽沈大活动家|测出你明年在哪方面会走大运,测试心理:你不敢走进哪座房子
-
羊奶果|农村娃经常吃的这种野果,如今已经涨到30块一斤,种植它错不了
-
emui11|55款机型可以升级EMUI 11,宣传视频泄露MATE40第二项重磅配置
-
中超|进球送点打人染红!中超8000万先生推队友发泄,至少停赛2场
-
叫你“老婆”的男人不一定爱你,敢叫这几个称呼,方是真的认定你
-
奥运会|谷爱凌碾压式夺冠 个人第2金创造历史:我是世界上唯一做过这套动作的女运动员
-
-
刚上初中的妹妹喜欢上了同班的级草并且告诉了我,我该咋办
-
被告人|贪污两千余万用于包养情人、炒股!青岛一干部被判刑!
-
一只背包客@泰国转手卖到千元,却遭中国游客哄抢,这是咋了,80元从中国进口
-
光刻机是国产芯片的“痛中痛”,中国何时可以摘取这颗明珠?
-
穷限制了想象!中国商人买下标价1000万元口罩 N99是个什么级别?