数组

作者: huyongming | 来源:发表于2020-10-13 20:03 被阅读0次

1、数据结构分类

1.1 线性表

线性表顾名思义就是数据排成一条线一样的结构,每个线性表上的数据最多只有前和后两个方向。常见的线性表有:

  1. 数组
  2. 链表
  3. 队列

  4. 线性表

1.2 非线性表

与线性表相对应的就是非线性表,在非线性表中,数据之间并不是简单的前后关系。常见的非线性表有


  1. 非线性表

2、什么是数组

数组是一种线性表数据结构,它使用一块连续的内存来存储数据类型相同的数据。


数组内存结构示意图

3、数组的特性

  1. 支持随机查找,随机查找的的时间复杂度为O(1)。因为数组在内存中是连续存储的,可以根据索引和数组起始地址计算索引所对应的元素的地址,直接根据这个地址去查找,所以时间复杂度为O(1)。
  2. 但是插入和删除操作比较低效,时间复杂度为O(n)。因为删除和插入数据的时候,为了保持数组内存的连续性,需要移动数组中原来的数据。

4、自定义ArrayList

自定义ArrayList,支持添加,插入,删除和查找数据,支持自动扩容。关键代码自动扩容

private void checkSize(int addSize) {
      if (addSize == elementData.length) {
          resize((int) (size * 1.5));//当申请的空间满了之后,扩大空间到原来的1.5倍
      }
}

private void resize(int capacity) {
     elementData = Arrays.copyOf(elementData, capacity);
}

插入

    public boolean add(int index, T t) {
        rangeCheckForAdd(index);
        checkSize(size + 1);
        System.arraycopy(elementData, index, elementData, index + 1,
                size - index);
        elementData[index] = t;
        size++;
        return true;
    }

删除

   public T remove(int index) {
        checkIndex(index);
        T t = (T) elementData[index];
        size--;
        System.arraycopy(elementData, index + 1, elementData, index,
                size - index);
        return t;
    }

完整代码和测试用例,请查看github之MyArrayList

说明

文中图片来源:极客时间,王争《数据结构与算法之美》

相关文章

  • 数组

    数组数组数组数组数组数组数组数组数组

  • JavaScript - 5.数组<增删改查>

    数组 Array 数组 - 增 数组 - 删 / 改 数组 - 查 数组 - 自动 toString() 数组 -...

  • PHP数组使用

    数组定义 数组增、删、改 数组查询 数组排序 数组合并、分割 数组比较、去重复 数组长度 数组遍历 数组转换 其他...

  • 》》》PHP初入---(三)

    数组定义 1.索引数组:数组下标是整型的 声明数组: 访问数组: count(数组)--获取数组长度 查看数组所有...

  • JavaScript中数组的常用操作

    数组的遍历 数组的映射 数组的简化 数组的连接 获取数组的片段 数组的拷贝 查找数组 数组去重

  • JavaSE之数组

    六、数组 目录:数组概述、数组声明创建、数组使用、多维数组、Array类、稀疏数组 1.什么是数组 数组的定义:数...

  • Shell数组、关联数组

    数组 定义数组 获取数组 关联数组 定义关联数组 获取关联数组

  • 学习Java第五天

    数组是多个数据的集合 数组的语法 数组元素类型【】 数组名; 多维数组: 数组元素类型【】【】 数组名; 多维数组...

  • php基础精粹

    PHP php数组 php数组之索引数组初始化 PHP数组之索引数组赋值 PHP数组之访问索引数组内容 PHP数组...

  • C语言的惯用集

    数组部分 数组部分 清空数组a 把数据读进数组a 对数组a求和

网友评论

      本文标题:数组

      本文链接:https://www.haomeiwen.com/subject/blhbpktx.html