线性表

数据结构:

  • 数据项
  • 数据对象
  • 数据结构
  1. 线性表
  2. 队列
  3. 堆栈
  4. 树 (HashMap(1.8)内置红黑树)
  5. 图论
  6. 排序和查找算法

数组

连续具有相同特征(物理地址 & 逻辑地址)

线性表

零个或多个元素的有限集合

顺序表 List

​ 一种物理顺序和逻辑顺序一致的数据结构。 index[i] : i:下标[i] 和 capacity[i] 一致。

ArrayList结构
  1. ArrayList 内部是 Object[]

    1. arrayCopy(a,index,a,index+1,s-index)
    2. 扩容 capacity 有俩中,初始化,在add时候10,不够通过 newCapacity << 1
  2. LinkedList 内部是 link 双项链表

链式表

​ 物理结构上非连续的存储,因为有next指向导致逻辑顺序是线性结构。

单链表 HashMap
HashMap单链表结构

    public class Node{
        Objet data;
        Node next;
    }

    //Add 
    s.next = p.next
    p.next = s
    
    //Remove
    p.next = p.next.next
    
    //Update
    p.Object = new Nede
    
    //Get
    while(p.next !=null){
        p=p.next
    }
  
双链表 LinkedList
LinkedList双链表结构
    public class Node {
        public E item;   
        public Node next;  //下个指向
        public Node prev;   //上个指向 
    }

    /**
    * 增Node 
    * p - [s] - d   //添加s节点。 知道P | 新增S
    * 1. s.next = p.next;
    * 2. p.next.prev = s
    * 3. s.prev = p
    * 4. p.next = s
    */

    
    /**
    *删除Node
    * p - s - d   //删除s节点  知道P
    * 1. p.next.prev = p.prev
    * 2. p.prev = p.next
    */
对比

顺序表、单链表、双链表 优缺点:

  1. 顺序表
    • 优点:连续的存数空间,允许随机访问,末尾删插方便
    • 缺点:非末尾删除、插入效率低,长度固定
  2. 单链表
    • 优点:增删效率高于数顺序表,切长度可以随意修改
    • 缺点:内存不是连续,不能随机查到需要循环
  3. 双链表
    • 同单链表,且效率比单链表更快一些。
数据结构容器数组
  1. List 是一个接口,它继承于Collection的接口,则代表着有序的队列。
  2. AbstractList 是一个抽象类,它继承于AbstractCollection 。AbstractList实现List接口中除size()、get(int location)之外的函数。
  3. AbstractSequentialList 是一个抽象类,它继承于AbstractList.AbstractSequentialList 实现了“链表中,根据index索引值操作链表的全部函数”
  4. ArrayList, LinkedList, Vector, Stack 是List的4个实现类。

缓存算法

  1. FIFO(First In First Out):先进先出(队列)置换算法,按照进入内存的先后顺序排成队列,从队尾进入,从队首删除。该算法会经常淘汰访问的数据。
  2. LRU(Least Recently Used):也就是首先淘汰最长时间未被使用的页面,可能最近也不会访问。缓存图片、分布式在广泛运用。
  3. LFU(Least Frequently Used):也就是淘汰一定时期内被访问次数最少的页。

你可能感兴趣的:(线性表)