From f1ac86f1da7db92a9449f25681d5ba40b1bfe114 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E6=9F=922012?= <345849402@qq.com> Date: Sun, 2 Sep 2018 12:41:01 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=BB=BA=20=20=E5=AF=B9=E4=BA=8EArray?= =?UTF-8?q?list=20=E7=9A=84=E4=B8=80=E4=BA=9B=E7=96=91=E9=97=AE.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Java Basis/ 对于Arraylist 的一些疑问.md | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 Java Basis/ 对于Arraylist 的一些疑问.md diff --git a/Java Basis/ 对于Arraylist 的一些疑问.md b/Java Basis/ 对于Arraylist 的一些疑问.md new file mode 100644 index 0000000..b51f670 --- /dev/null +++ b/Java Basis/ 对于Arraylist 的一些疑问.md @@ -0,0 +1,18 @@ +#### 是否保证线程安全? +ArrayList 和 LinkedList 都是不同步的,也就是不保证线程安全。 + +#### 底层数据结构区别? + +Arraylist 底层使用的是Object数组;LinkedList 底层使用的是双向循环链表数据结构。 + +#### 插入和删除是否受元素位置的影响? + +ArrayList 采用数组存储,所以插入和删除元素的时间复杂度受元素位置的影响。 比如:执行add(E e)方法的时候, ArrayList 会默认在将指定的元素追加到此列表的末尾,这种情况时间复杂度就是O(1)。但是如果要在指定位置 i 插入和删除元素的话(add(int index, E element))时间复杂度就为 O(n-i)。因为在进行上述操作的时候集合中第 i 和第 i 个元素之后的(n-i)个元素都要执行向后位/向前移一位的操作。 +LinkedList 采用链表存储,所以插入,删除元素时间复杂度不受元素位置的影响,都是近似 O(1)而数组为近似 O(n)。 + +#### 是否支持快速随机访问? + +LinkedList 不支持高效的随机元素访问,而ArrayList 实现了RandmoAccess 接口,所以有随机访问功能。快速随机访问就是通过元素的序号快速获取元素对象(对应于get(int index)方法)。 +#### 内存空间占用? + + ArrayList的空 间浪费主要体现在在list列表的结尾会预留一定的容量空间,而LinkedList的空间花费则体现在它的每一个元素都需要消耗比ArrayList更多的空间(因为要存放直接后继和直接前驱以及数据)。 \ No newline at end of file