1. 数组和链表
数组
概念:数组是一种线性数据结构,其中元素按顺序存储并可以通过索引随机访问。
优点:
- 快速随机访问:O(1)时间复杂度。
- 内存连续,缓存友好。
缺点:
- 插入和删除操作效率低:O(n)时间复杂度。
- 大小固定,需要预定义。
使用场景:需要频繁访问元素且数组大小已知或可预估时。
public class ArrayExample {
public static void main(String[] args) {
// 声明和初始化数组
int[] array = new int[5];
// 给数组赋值
array[0] = 1;
array[1] = 2;
array[2] = 3;
array[3] = 4;
array[4] = 5;
// 访问数组元素
for (int i = 0; i < array.length; i++) {
System.out.println("Element at index " + i + ": " + array[i]);
}
// 动态数组(ArrayList)
ArrayList<Integer> dynamicArray = new ArrayList<>();
dynamicArray.add(1);
dynamicArray.add(2);
dynamicArray.add(3);
System.out.println("Dynamic Array Elements: " + dynamicArray);
}
}
链表
概念:链表是一种线性数据结构,其中每个元素(节点)包含一个数据值和一个指向下一个节点的引用。
优点:
- 插入和删除操作效率高:O(1)时间复杂度(在已知节点位置时)。
- 动态大小。
缺点:
- 随机访问效率低:O(n)时间复杂度。
- 需要额外的存储空间来存储指针。
使用场景:需要频繁插入和删除元素,且元素访问相对较少时。
class Node {
int data;
Node next;
Node(int data) {
this.data = data;