ArrayList 和 LinkedList

ArrayList<>

ArrayList 在数组的基础上实现了自动扩容
 ArrayList<> arralist = new ArrayList<>();
 List<String> arralist = new ArrayList<>();
 arralist.add()      添加元素
 arralist.add(0,"呆子");       向指定位置添加元素
 arralist.set(1,"八戒")     替换指定位置元素 
 arralist.remove(int)      删除指定位置元素
 arralist.IndexOF(int)/arralist.lastIndexOF(int)     正向/反向查找元素位置
import java.util.ArrayList;
public class ArraListDemo {
    ArrayList<String> al = new ArrayList<>();
        al.add("大王");   //添加元素
        al.add("二弟");
        al.add(0,"呆子");    //向指定位置添加元素
        al.set(1,"八戒");      //替换指定位置元素
        al.add("妖怪");
        al.set(2,"白骨精");
        al.remove(0);       //删除指定位置元素
        System.out.println(al);
        System.out.println(al.lastIndexOf("呆子"));         //正向/反向查找元素位置
//        System.out.println(al3);
    }
}

java addOlePackage函数添加vba_数据结构


时间复杂度

1)通过下标(也就是 get(int index))访问一个元素的时间复杂度为 O(1),因为是直达的,无论数据增大多少倍,耗时都不变。

2)默认添加一个元素(调用 add() 方法时)的时间复杂度为 O(1),因为是直接添加到数组末尾的,但需要考虑到数组扩容时消耗的时间。

3)删除一个元素(调用 remove(Object) 方法时)的时间复杂度为 O(n),因为要遍历列表,数据量增大几倍,耗时也增大几倍;如果是通过下标删除元素时,要考虑到数组的移动和复制所消耗的时间。

4)查找一个未排序的列表时间复杂度为 O(n)(调用 indexOf() 或者 lastIndexOf() 方法时),因为要遍历列表;查找排序过的列表时间复杂度为 O(log n),因为可以使用二分查找法,当数据增大 n 倍时,耗时增大 logn 倍(这里的 log 是以 2 为底的,每找一次排除一半的可能)

LinkedList<>

链表

第一层叫做“单向链表”,我只有一个后指针,指向下一个数据;
第二层叫做“双向链表”,我有两个指针,后指针指向下一个数据,前指针指向上一个数据。
第三层叫做“二叉树”,把后指针去掉,换成左右指针。

LinkedList<String> linkedList = new LinkedList<>();
 linkedList.add("20时王");
 linkedList.add(0,"《一号老爷子》");
 linkedList.set(10,"《暗日重生》");
 linkedList.remove():删除第一个节点
 linkedList.remove(int):删除指定位置的节点
 linkedList.remove(Object):删除指定元素的节点
 linkedList.removeFirst():删除第一个节点
 linkedList.removeLast():删除最后一个节点
 linkedList.IndexOF(Object):查找某个元素所在的位置
 linkedList.get(int):获取这个位置的元素
import java.util.LinkedList;

public class LinkedListDemo {
    public static void main(String[] args) {
        LinkedList<String> linkedList = new LinkedList<>();
        linkedList.add("1空我");
        linkedList.add("2亚极陀");
        linkedList.add("3龙骑");
        linkedList.add("4剑");
        linkedList.add("5555");
        linkedList.add("6响鬼");
        linkedList.add("7甲斗");
        linkedList.add("8电王");
        linkedList.add("9月骑");
        linkedList.add("10帝骑");
        linkedList.add("20时王");
        linkedList.add(0,"《一号老爷子》");
        linkedList.set(10,"《暗日重生》");
//        linkedList.remove(0);
//        linkedList.indexOf("空我");
        System.out.println(linkedList);
        System.out.println(linkedList.indexOf("8电王"));

    }
}

java addOlePackage函数添加vba_时间复杂度_02

 ArrayList 和 LinkedList两者区别

  • ArrayList 基于动态数组实现,LinkedList 基于双向链表实现;
  • ArrayList 支持随机访问,LinkedList 不支持;
  • LinkedList 在任意位置添加删除元素更快。