同步性: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接口)接口 , 可以当做队列使用 。
推荐阅读
-
-
-
【朱元璋】朱元璋饿晕在街边,大娘送碗热汤相救,衣锦还乡后是怎么报恩的?
-
-
【上观新闻】被发现了!原来“开心麻花”在这里紧张排演新剧目
-
佐佐木希拒绝离婚:并非所有原谅,都能换来背叛男人的回心转意
-
-
-
潮范儿搭配|衣品是骨子里的,林妙可穿的单品都不老气,但她一穿就觉得土!
-
#娱乐圈#娱乐圈隐形富豪!唱歌主持只是副业,名下共有55家公司
-
-
-
好听阳光帅气的男孩名字大全 好听阳光帅气的男孩名字大全两个字
-
阿星说汽车11万起福特举手投降,本田新车总算良心发现!福克斯见了无动于衷
-
大白财经观察|股民亏钱获赔七成损失,四家公司违规信批造出假牛市
-
固态硬盘|硬盘挖矿袭来!嘉合劲威:大容量SSD供货告急
-
球圆字方|黄潜门将压梅西拿全场最佳,6.9大于9.1?西甲官方现“搞笑”评选
-
-
-