Vector/Arraylist/LinkedList

一. ArrayList 与 LinkedList 区别
ArrayList 和 LinkedList 都实现了 List 接口, 他们有以下的不同点:
ArrayList 是基于索引的数据接口, 它的底层是数组。 它可以以 O(1)时间复杂度对元素进行随机访问。 与此对应, LinkedList 是以元素列表的形式存储它的数据, 每一个元素都和它的前一个和后一个元素链接在一起, 在这种情况下, 查找某个元素的时间复杂度是 O(n)。
相对于 ArrayList, LinkedList 的插入, 添加, 删除操作速度更快, 因为当元素被添加到集合任意位置的时候, 不需要像数组那样重新计算大小或者是更新索引。LinkedList 比 ArrayList 更占内存, 因为 LinkedList 为每一个节点存储了两个引用, 一个指向前一个元素, 一个指向下一个元素。
二. Vetor arraylist Linkedlist 区别
ArrayList 就是动态数组, 是 Array 的复杂版本, 动态的增加和减少元素.当更多的元素加入到 ArrayList 中时,其大小将会动态地增长。 它的元素可以通过 get/set 方法直接访问,因为 ArrayList 本质上是一个数组。 初始容量为 10。 1.插入元素的时候可能扩容,删除元素时不会缩小容量。2.扩容增长为 Arraylist 增长原来的 0.5 倍 3. 而 Arraylist 没有设置增长空间
的方法。 4.线程不同步Vector 和 ArrayList 类似, 区别在于 Vector 是同步类(synchronized).因此,开销就比ArrayList 要大。 初始容量为 10。 实现了随机访问接口, 可以随机访问。

Vector 是内部是以动态数组的形式来存储数据的。 1.Vector 还可以设置增长的空间大小, 2. 及 Vector 增长原来的 1 倍 3.vector 线程同步

LinkedList 是一个双链表,在添加和删除元素时具有比 ArrayList 更好的性能.但在 get与 set 方面弱于 ArrayList.当然,这些对比都是指数据量很大或者操作很频繁的情况下的对比。 它还实现了 Queue 接口,该接口比 List 提供了更多的方法,包括 offer(),peek(),poll()等.

ArrayList 和 LinkedList 的使用场景, 其中 add 方法的实现 ArrayList,LinkedList 的实现以及插入, 查找, 删除的过程

三. 使用 ArrayList 的迭代器会出现什么问题? 单线程和多线程环境下;
答: 常用的迭代器设计模式, iterator 方法返回一个父类实现的迭代器。
1、 迭代器的 hasNext 方法的作用是判断当前位置是否是数组最后一个位置, 相等为 false,否则为 true。
2、 迭代器 next 方法用于返回当前的元素, 并把指针指向下一个元素, 值得注意的是, 每次使用 next 方法的时候, 都会判断创建迭代器获取的这个容器的计数器 modCount 是否与此时 的 不 相 等 , 不 相 等 说 明 集 合 的 大 小 被 修 改 过 , 如 果 是 会 抛 出ConcurrentModificationException 异常, 如果相等调用 get 方法返回元素即可。

四. 数组(Array)和列表(ArrayList)有什么区别? 什么时候应该使用 Array 而不是ArrayList?
答: 不同点: 定义上: Array 可以包含基本类型和对象类型, ArrayList 只能包含对象类型。 容量上: Array 大小固定, ArrayList 的大小是动态变化的。 操作上: ArrayList 提供更多的方法和特性, 如: addAll(), removeAll(), iterator()等等。 使用基本数据类型或者知道数据元素数量的时候可以考虑 Array;ArrayList 处理固定数量的基本类型数据类型时会自动装箱来减少编码工作量, 但是相对较慢。

五. ArrayList 和 Vector 有何异同点?
相同点:
(1) 两者都是基于索引的, 都是基于数组的。
(2) 两者都维护插入顺序, 我们可以根据插入顺序来获取元素。
(3) ArrayList 和 Vector 的迭代器实现都是 fail-fast 的。
(4) ArrayList 和 Vector 两者允许 null 值, 也可以使用索引值对元素进行随机访问。
不同点:
(1) Vector 是同步, 线程安全, 而 ArrayList 非同步, 线程不安全。 对于 ArrayList, 如果迭代时改变列表, 应该使用 CopyOnWriteArrayList。
( 2) 但是, ArrayList 比 Vector 要快, 它因为有同步, 不会过载。
( 3) 在使用上, ArrayList 更加通用, 因为 Collections 工具类容易获取同步列表和只读列

猜你喜欢

转载自blog.csdn.net/u010651249/article/details/84030551
今日推荐