9_Java集合

链表概述

  • 单链表

image.png

  • 双链表

image.png


链表的四种操作(单链表为例)

  • 访问 Access 时间复杂度 O(N)
    遍历从前往后一个个找,从而进行访问
  • 搜索 Search 时间复杂度 O(N)
    需要对链表进行遍历查找
  • 插入 Insert 时间复杂度 O(1)

前元素指向插入元素,插入元素指向后一个元素

  • 删除 Delete 时间复杂度 O(1)
    前元素指向后元素,跳过要删除的元素即可

链表特点

  • 不适合读,读很慢
  • 适合频繁做增删操作
  • 场景:读少写多

链表实际的常用操作(Java)

  • 创建链表

    1. //Create a LinkedList
    2. LinkedList<Integer> list = new LinkedList<>();
  • 添加元素

    1. //Add element 尾端添加
    2. //Time Complexity:O(1)
    3. list.add(1);
    4. list.add(2);
    5. list.add(3);
    6. //[1,2,3]
    7. System.out.println(list.toString());
    8. //Insert element 先找后插入
    9. //Time Complexity:O(N)
    10. list.add(2, 99);
    11. //[1,2,99,3]
    12. System.out.println(list.toString());
  • 访问元素

    1. //Access Element
    2. //Time Complexity:O(N)
    3. int element = list.get(2);
    4. //99
    5. System.out.println(element);
  • 搜索元素

    1. //Search element
    2. //Time complexity:O(N)
    3. int index = list.indexOf(99);
    4. //2
    5. System.out.println(index);
  • 更新元素

    1. //Update element
    2. //Time Complexity:O(N)
    3. list.set(2, 88);
    4. //[1,2,88,3]
    5. System.out.println(list.toString());
  • 删除元素

    1. //Remove element 先找再删除
    2. //Time Complexity:O(N)
    3. list.remove(2);
    4. //[1,2,3]
    5. System.out.println(list.toString());
  • 长度

    1. //Length
    2. //Time Complexity:O(1)
    3. int length = list.size();
    4. //3
    5. System.out.println(length);

LeetCode练习

#203

#206


参考:https://www.bilibili.com/read/cv8585621?spm_id_from=333.788.b_636f6d6d656e74.18