ArrayList和LinkedList都是Java集合框架中的List接口的实现类,它们都可以存储一组有序的元素,但是它们在实现方式和适用场景上有一些不同。
实现方式
ArrayList是基于数组实现的,通过动态数组来存储元素。在进行插入、删除等操作时,需要将数组中的元素向后移动或向前移动,因此插入、删除等操作的效率较低,但是随机访问元素的效率非常高。
LinkedList是基于链表实现的,通过双向链表来存储元素。在进行插入、删除等操作时,只需要改变指针的指向,因此插入、删除等操作的效率较高,但是随机访问元素的效率较低。
适用场景
ArrayList适用于随机访问元素的场景,因为它可以通过下标快速访问元素。同时,由于ArrayList是基于数组实现的,因此它的内存占用量较小,不会像LinkedList那样存在额外的指针占用内存空间。
LinkedList适用于频繁的插入、删除等操作的场景,因为它可以通过改变指针的指向快速完成这些操作。同时,由于LinkedList是基于链表实现的,因此它的内存占用量较大,每个元素都需要额外的指针占用内存空间。
以下是使用ArrayList和LinkedList的简单示例:
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
public class ListDemo {
public static void main(String[] args) {
// ArrayList 示例
List<String> arrayList = new ArrayList<>();
arrayList.add("a");
arrayList.add("b");
arrayList.add("c");
System.out.println("ArrayList:" + arrayList);
System.out.println("第二个元素为:" + arrayList.get(1));
// LinkedList 示例
List<String> linkedList = new LinkedList<>();
linkedList.add("a");
linkedList.add("b");
linkedList.add("c");
System.out.println("LinkedList:" + linkedList);
System.out.println("第二个元素为:" + linkedList.get(1));
}
}