2021-08-17

课知识复习 - add源码,数据结构

  数据结构
    一种存储数据的方式或工具,它无处不在,不经意间我们就会使用到它,就比如arraylist,一个自动扩充的容器。我们最常见的几种数据结构:堆栈、队列、数组、链表和红黑树。

    

    栈(stack),一个存放数据,元素,地址的容器,我们常听到的进栈(入栈)就是指添加一个新的元素进去,栈还有一个特点 - 先进后出(存进去的元素,要在后它后面的元素依次取出后,才能取出该元素)。栈的入口和出口的都可以是栈的顶端。我们称存元素为压栈,称取元素为弹栈。

    队列(queue),一种运算受限的线性表,只能在一端插入,另一端删除。入出口各 占一端。

    数组(array),一个有秩序用来存储元素的列表  。从编号0(索引)开始,查找元素,所以它的特点是查询快,          				增删慢。数组提供了方法让我们可以指定索引位置增添或者删除元素。

    链表(linked list),链表中每一个元素称为结点,每个结点都由两部分组成 - 1.数据域:存储数据元素 2.指针域:存储下一结点地址。特点:地址连接结点,查询慢(通过连接的结点,一 个个向后找),增删快(只需修改下一个的地址)。

    红黑树 二叉树(binary tree),每个节点最多有两个子树的树结构。顶端的是根结点,左右分别为左子树和右子树。红黑树的约束:1. 节点可以是红色的或者黑色的2. 根节点是黑色的3. 叶子节点(特指空节点)是黑色的4. 每个红色节点的子节点都是黑色的5. 任何一个节点到其每一个叶子节点的所有路径上黑色节点数相同特点:查询快,增删快。

    

  ADD源码

   先判断需不需要扩容,如果需要就进行扩容,然后将元素存在size里,按照索引有顺序地添加元素,然后size加一,表示ArrayList的大小扩展了一格。
   第一次我们增加元素的时候,传进来的这个minCapacity大小默认为10,我所需要的容量大于容器大小,就要扩容。
   modCount就像是一个记录我们修改次数的计数器,每次add或remove它都会加一。

   minCapacity是我们需要扩容的最小容量,我们的目的就是让newCapacity大等于oldCapacity, 当newCapacity小于minCapacity,如果newCapacity超出了最大的数组长度MAX_ARRAY_SIZE,就将newCapacity设置为minCapacity - 10。

   newCapacity为oldCapacity的1.5倍

   调用hugeCapacity,minCapacity为参数(10),然后判断索引是否小于0,是就抛出error。
   再判断minCapacity与MAX_ARRAY_SIZE的关系,如果MAX_ARRAY_SIZE大就说明成立,就把它赋值给newCapacity。

   最后,新拓展的数组length为newCapacity,并将新数组的元素赋值到老的里面。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值