【数据结构与算法】- 数组

数组

    • 1.1 数组的定义
    • 1.2 数组的创建
    • 1.3 数组在内存中的情况
    • 2.1 初始化数组
    • 2.2 插入元素
    • 2.3 删除元素
    • 2.4 读取元素
    • 2.5 遍历数组

1.1 数组的定义

数组中的是在内存中是连续存储的,内存是由一个个内存单元组成的,每一个内存单元都有自己的地址,数组中的每一个元素可以存储在这一个个内存单元中,使用索引来访问数组中的元素。

1.2 数组的创建

int[] arr = {1,2,3,4};

从上一个小节,不难得出,数组中访问元素时的时间复杂度为 O ( 1 ) O(1) O(1)

1.3 数组在内存中的情况

在这里插入图片描述

可以理解成图中所示,黄线表示空闲的存储单元,蓝线表示这个存储单元已经被其他元素所占用,1,2,3,4就是所创建的数组,可以看到是连续的。

2.1 初始化数组

 	// 当前数组的元素个数private int size = 0;// 容量private int capacity = 5;// 数组private int[] array = {};/*** 数组扩容与初始化数组*/private void checkAndGrow() {if (size == 0){ // 如果元素个数为0,就初始化数组array = new int[capacity];}else if (size == capacity) { // 数组已满,就扩容数组capacity += capacity >> 1;int[] newArray = new int[capacity];System.arraycopy(array, 0, newArray, 0, size);array = newArray;}}

时间复杂度为: O ( n ) O(n) O(n)

2.2 插入元素

    /*** 向[0..size]位置添加元素** @param index* @param element*/public void add(int index, int element) {// 检查是否扩容checkAndGrow();if (index >= 0 && index < size) {// 当插入新元素时,其他数组中的元素往右移System.arraycopy(array, index, array, index + 1, size - index);}// 当等于size时插入尾节点array[index] = element;size++;}/*** 向最后位置[size]添加元素** @param element*/public void addLast(int element) {add(size, element);}

时间复杂度为: O ( n ) O(n) O(n)

2.3 删除元素

/*** 删除数组中的元素** @param index* @return*/public int remove(int index) {int removed = array[index];// 当为数组中的最后一个元素,就不需要移动if (index < size - 1) {System.arraycopy(array, index + 1, array, index, size - index - 1);}size--;return removed;}

时间复杂度为: O ( n ) O(n) O(n)

2.4 读取元素

    /*** 根据索引返回元素*/public int get(int index) {return array[index];}

时间复杂度: O ( 1 ) O(1) O(1)

2.5 遍历数组

 /*** 基于函数式接口,可以按照要求来指定所要实现的功能** @param consumer*/public void myForEach(Consumer<Integer> consumer) {for (int i = 0; i < size; i++) {consumer.accept(array[i]);}}/*** 迭代器遍历** @return*/@Overridepublic Iterator<Integer> iterator() {return new Iterator<Integer>() {int i = 0;// 查看还是否有下个元素@Overridepublic boolean hasNext() {return i < size;}// 返回当前所指向的元素,并且指针往后移动@Overridepublic Integer next() {return array[i++];}};}

时间复杂度: O ( n ) O(n) O(n)

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/124087.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

优先级队列

优先级队列 一端进&#xff0c;另一端出 按优先级出队 普通队列 一端进&#xff0c;另一端出 FIFO 我们做个约定&#xff1a;数字大的&#xff0c;优先级越高 &#xff0c;优先出队 无序数组实现 要点 入队保持顺序 出队前找到优先级最高的出队&#xff0c;相当于一次选择排序…

Tensorflow2 GPU 安装方法

一、Tensorflow2 GPU 安装方法 1. 首先安装Anaconda3环境2. 在Anaconda Prompt 中安装tensorflow23. 验证GPU是否可以使用4. 错误解决 1. 首先安装Anaconda3环境 https://www.anaconda.com/ 2. 在Anaconda Prompt 中安装tensorflow2 conda update conda conda create -n ten…

Unity把UGUI再World模式下显示到相机最前方

Unity把UGUI再World模式下显示到相机最前方 通过脚本修改Shader 再VR里有时候要把3D的UI显示到相机最前方&#xff0c;加个UI相机会坏事&#xff0c;可以通过修改unity_GUIZTestMode来解决。 测试用例 测试用例如下&#xff1a; 场景包含一个红色的盒子&#xff0c;一个UI…

github搜索技巧

指定语言 language:java 比如我要找用java写的含有blog的内容 搜索项目名称包含关键词的内容 vue in:name 其他如项目描述跟项目文档&#xff0c;如下 组合使用 vue in:name,description,readme 根据Star 或者fork的数量来查找 总结 springboot vue stars:>1000 p…

关于字符拼接

当然&#xff0c;以下是加入了幽默注释的代码和对应的逻辑树&#xff1a; # 提示用户输入input和txt内容&#xff0c;期待用户真有输入 input_text input("请输入input文本&#xff1a;") # 好了&#xff0c;快点输入吧 txt_text input("请输入txt文本&#…

【数据结构】红黑树(C++实现)

​ ​&#x1f4dd;个人主页&#xff1a;Sherry的成长之路 &#x1f3e0;学习社区&#xff1a;Sherry的成长之路&#xff08;个人社区&#xff09; &#x1f4d6;专栏链接&#xff1a;数据结构 &#x1f3af;长路漫漫浩浩&#xff0c;万事皆有期待 上一篇博客&#xff1a;【数据…

Android逆向学习(五)app进行动态调试

Android逆向学习&#xff08;五&#xff09;app进行动态调试 一、写在前面 非常抱歉鸽了那么久&#xff0c;前一段时间一直在忙&#xff0c;现在终于结束了&#xff0c;可以继续更新android逆向系列的&#xff0c;这个系列我会尽力做下去&#xff0c;然后如果可以的话我看看能…

华为云HECS云服务器docker环境下安装nginx

前提&#xff1a;有一台华为云服务器。 华为云HECS云服务器&#xff0c;安装docker环境&#xff0c;查看如下文章。 华为云HECS安装docker-CSDN博客 一、拉取镜像 下载最新版Nginx镜像 (其实此命令就等同于 : docker pull nginx:latest ) docker pull nginx查看镜像 dock…

SpringBoot中使用Servlet和Filter

为什么要把Servlet和Filter写在一起,因为使用方式很相似 两种方式 第一种,使用Servlet和Filter 使用Servlet 继承HttpServlet 注册Servlet 使用Filter 1.自定义过滤器 2.注册过滤器 这里注意一点 使用/**无效 至少我这2.4.5版本是这样 过滤所有请求用/* 那么其实还有…

(unordered)map和set封装(底层红黑树)

map和set封装 文章目录 map和set封装设计问题&#xff08;知其所以然&#xff09;为什么要对iterator进行封装&#xff1f;为什么要引入Self Ref Ptr这些模板参数&#xff1f;为什么是试图从non_const转变为const&#xff0c;而不是const转为non_const如何解决 为什么说能加con…

【C++】模板初阶 -- 详解

一、泛型编程 // 实现一个通用的交换函数&#xff1a; void Swap(int& left, int& right) {int temp left;left right;right temp; }void Swap(double& left, double& right) {double temp left;left right;right temp; }void Swap(char& left, ch…

PDF文件压缩软件 PDF Squeezer mac中文版​软件特点

PDF Squeezer mac是一款macOS平台上的PDF文件压缩软件&#xff0c;可以帮助用户快速地压缩PDF文件&#xff0c;从而减小文件大小&#xff0c;使其更容易共享、存储和传输。PDF Squeezer使用先进的压缩算法&#xff0c;可以在不影响文件质量的情况下减小文件大小。 PDF Squeezer…