ArrayList和LinkedList的区别(Java基础面试题)
面试官问你这个题的关键,是为了考察你的数据结构功底,理解及深入程度。
此处ArrayList和LinkedList是Java语言实现的数据结构,如果你对数组和链表有了解,那这个问题就是简易的。
进入正题,总结几点:
ArrayList的实现是基于数组来实现的,LinkedList的基于双向链表来实现。这两个数据结构的逻辑关系是不一样,当然物理存储的方式也会是不一样。
对于随机访问,ArrayList优于LinkedList。
原因:ArrayList基于数组 有独特的索引机制 可以快速查找相对应的数据对于插入和删除操作,LinkedList优于ArrayList
原因: Linked可以从任意位置插入删除,如果在ArrayList的中间插入或删除一个元素,那么这个列表中剩余的元素都会被移动;而在LinkedList的中间插入或删除一个元素的开销是固定的。LinkedList比ArrayList更占内存
原因LinkedList的节点除了存储数据,还存储了两个引用,一个指向前一个元素,一个指向后一个元素。
我们假设现在有10000个元素放置在集合中,在这种情况下对集合做元素操作。
package test;
import java.util.ArrayList;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
import java.lang.Integer;
public class P2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
ArrayList<Integer> arrList = new ArrayList();
LinkedList<Integer> linList = new LinkedList();
for (int i = 0; i < 10000; i++) {
arrList.add(i);
linList.add(i);
}
System.out.println("ArrayList访问消耗的时间:" + getTime(arrList));
System.out.println("LinkedList访问消耗的时间:" + getTime(linList));
System.out.println("\nArrayList插入消耗的时间:" + insertTime(arrList));
System.out.println("LinkedList插入消耗的时间:" + insertTime(linList));
System.out.println("\nArrayList删除消耗的时间:" + delTime(arrList));
System.out.println("LinkedList删除消耗的时间:" + delTime(linList));
}
public static long getTime(List list) {
long time = System.currentTimeMillis();
for (int i = 0; i < 10000; i++) {
int index = Collections.binarySearch(list, list.get(i));
if (index != i) {
System.out.println("ERROR!");
}
}
return System.currentTimeMillis() - time;
}
public static long insertTime(List list) {
long time = System.currentTimeMillis();
for (int i = 0; i < 100000; i++) {
list.add(10, i); // 在索引为10的位置插入10万元素
}
return System.currentTimeMillis() - time;
}
public static long delTime(List list) {
long time = System.currentTimeMillis();
for (int i = 0; i < list.size(); i++) {
list.remove(i); // 在索引下,逐个删除所有元素
}
return System.currentTimeMillis() - time;
}
}
ArrayList访问消耗的时间:6
LinkedList访问消耗的时间:1296
ArrayList插入消耗的时间:2724
LinkedList插入消耗的时间:23
ArrayList删除消耗的时间:1721
LinkedList删除消耗的时间:17582
来源:CSDN
作者:fengsong_
链接:https://blog.csdn.net/qq_37126480/article/details/103708604