算法与数据结构之数组(Java)

目录

1、数组的定义

2、线性结构与非线性结构

3、数组的表现形式

3.1 一维数组

3.2 多维数组

4、重要特性:随机访问

5、ArrayList和数组

6、堆内存和栈内存

7、数组的增删查改

7.1 插入数据

7.2 删除一个数据

7.3 修改数组

7.4 查找数据

8、总结

什么是数组?

1、数组的定义

所谓数组,是有序的元素序列。如将有限个类型相同的变量的集合命名,那么这个名称就是数组名。

数组是用于存储多个相同类型数据的集合。通常用Array表示,也称之为线性表。

数组的特点:

(1)数组是相同数据类型的元素的集合(int的数组不能存float,float也不能存double)

(2) 数组中各元素的存储是有先后顺序的,它们在内存中按照这个顺序连续存放到一起。内存地址(连续存储)

(3)数组元素用整个数组的名字和它自己在数组中的顺序位置来表示。例如a[0]表示名字为a的数组中的第一个元素。a[1]表示名字为a的数组中的第二个元素,以此类推。

2、线性结构与非线性结构

3、数组的表现形式

3.1 一维数组

int a[],String b[];

3.2 多维数组

int a[][],String b[][][];//int a[m][n]:内存空间是多少?mxn

4、重要特性:随机访问

数组是连续的内存空间和相同类型的数据。正是因为这两个限制,它才有了这个重要的特性:随机访问。

优势:查找效率高(随机访问的应用)

缺点:删除、插入(效率相对低,因为要根据插入和删除的位置决定;效率低的原因:为了保证连续性,需要做大量的数据搬移工作)

比如往数组中插入一个数据:

删除数组中的某个数据:

使用数组注意事项:使用数组一定要注意访问越界的问题。要多加判断,尤其是开始和结束,测试的时候也要注意头尾。

5、ArrayList和数组

本质上是一样的,都是数组。ArrayList是JDK封装了。不需要管扩容等操作。

数组的话就是要你全部操作。

两者之间如何选择?

1、不知道数据大小的肯定选ArrayList(不需要管理扩容操作)

2、如果知道数据大小且非常关注性能的就选数组

6、堆内存和栈内存

Java分为堆栈两种内存(C语言同理)

什么是堆内存?(FIFO)

存放new 创建的对象和数组。

什么是栈内存?

引用变量(FILO)

堆栈区别:

栈:为编译器自动分配和释放,如函数参数、局部变量、临时变量等等

堆:为成员分配和释放,有程序员自己申请、自己释放。否则发生内存泄漏。(java自动管理(gc))

1、栈的速度要快

2、栈内存的数据可以共享,主要存一些基本数据类型。

int a = 3; //在栈中创建变量a然后给a赋值,先不会创建一个3,而是先在栈中找有没有3,如果有直接指向。
//如果没有就加一个3进来int b = 3; //首先也要创建一个变量b

7、数组的增删查改

private int index;//数组已存在数据的大小private int size;//数组大小private int data[];//数组定义

7.1 插入数据

public void insert(int loc, int n) {if (index++ < size) {//从后开始遍历,遍历到需要插入的位置,开始后移数据for (int i = size - 1; i > loc; i--) {//数据往后移动data[i] = data[i - 1];}//在loc位置插入n值data[loc] = n;} else {//扩容this.size = size * 2 + 1;int[] newData = new int[this.size];for (int i = 0; i < data.length; i++) {newData[i] = data[i];}this.data = newData;//从后开始遍历,遍历到需要插入的位置,开始后移数据for (int i = size - 1; i > loc; i--) {//数据往后移动data[i] = data[i - 1];}//在loc位置插入n值data[loc] = n;}}

7.2 删除一个数据

    public void delete(int loc) {//O(n)for (int i = loc; i < size - 1; i++) {//判断不是最后一个,如果是组后一个则把最后一个数据置为默认值0,就是没存数据if (i != size - 1) {//后面的数据要向前移动,确保连续性data[i] = data[i + 1];} else {data[i] = 0;}}index--;}

7.3 修改数组

public void update(int loc, int n) {//O(1)data[loc] = n;
}

7.4 查找数据

public int get(int loc) {//随机访问O(1)return data[loc];}

8、总结

数组是一个最简单的数据结构。它存储相同类型的一组数据,最大的特点就是下标和随机访问,缺点就是插入和删除都很慢,时间复杂度为O(n)。

思考:1、为什么数组的下标是从0开始呢?(连续存储)

如果不从0开始:就需要操作减法运算,计算机减法操作起来比加法复杂很多,以此优先考虑使用加法进行计算

一维数组的寻址公式:init_loc(初始内存地址) + index(数组下标)*size(数组长度)

loc = init_loc +index * size

2、二维数组的内存地址是怎样的?写出寻址公式?

二维数组的内存地址:

二维转一维:

1 2 3

4 5 6

》1 2 3 4 5 6

=》 4的下标是在二维里面是(1,0)

=》在一维里面是第3个

=》i *n(一维的长度) + j(在列)

==》1 * 3 + 0 = 3

a[i][j]: (i< n, j<n)loc = init_loc + (i *n + j) * size

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

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

相关文章

SoapUI 怎么下载:实用指南

SoapUI Windows 版本下载 今天带大家过一遍 SoapUI 在 Windows 系统下的安装教程吧&#xff01;各位 开发小伙伴 们可以跟着我一起来~ 下载安装包 下载链接&#xff1a;www.soapui.org/downloads/s… 安装 安装非常简单&#xff0c;只需双击它即可启动&#xff0c;安装程序…

Java多线程<二>多线程经典场景

leetcode 多线程刷题 上锁上一次&#xff0c;还是上多次&#xff1f; 同步的顺序。 1. 交替打印字符 使用sychronize同步锁使用lock锁使用concurrent的默认机制使用volitale关键字 Thread.sleep() / Thread.yield机制使用automic原子类 方式1 &#xff1a;使用互斥访问st…

异步优势演员-评论家算法 A3C

异步优势演员-评论家算法 A3C 异步优势演员-评论家算法 A3C网络结构并行步骤 异步优势演员-评论家算法 A3C A3C 在 A2C 基础上&#xff0c;增加了并行训练&#xff08;异步&#xff09;来提高效率。 网络结构 A2C&#xff1a; A3C&#xff1a; 在这两张图之间&#xff0c;…

全解析阿里云Alibaba Cloud Linux镜像操作系统

Alibaba Cloud Linux是基于龙蜥社区OpenAnolis龙蜥操作系统Anolis OS的阿里云发行版&#xff0c;针对阿里云服务器ECS做了大量深度优化&#xff0c;Alibaba Cloud Linux由阿里云官方免费提供长期支持和维护LTS&#xff0c;Alibaba Cloud Linux完全兼容CentOS/RHEL生态和操作方式…

DataGear 4.7.0 发布,数据可视化分析平台

DataGear 4.7.0 发布&#xff0c;严重漏洞和BUG修复&#xff0c;具体更新内容如下&#xff1a; 新增&#xff1a;HTTP数据集新增【编码请求地址】支持&#xff0c;可用于解决请求地址中文乱码问题&#xff1b;新增&#xff1a;新增数据源密码加密存储支持&#xff08;开启需设…

Yapi安装配置(CentOs)

环境要求 nodejs&#xff08;7.6) mongodb&#xff08;2.6&#xff09; git 准备工作 清除yum命令缓存 sudo yum clean all卸载低版本nodejs yum remove nodejs npm -y安装nodejs,获取资源,安装高版本nodejs curl -sL https://rpm.nodesource.com/setup_8.x | bash - #安装 s…

Unable to connect to Redis server

报错内容&#xff1a; Exception in thread "main" org.redisson.client.RedisConnectionException: java.util.concurrent.ExecutionException: org.redisson.client.RedisConnectionException: Unable to connect to Redis server: 175.24.186.230/175.24.186.230…

物联网安全:保护关键网络免受数字攻击

物联网 (IoT) 彻底改变了当今互联世界中的各个行业&#xff0c;实现了智能家居、自动驾驶汽车和先进的工业系统。然而&#xff0c;随着物联网设备数量的急剧增加&#xff0c;这些设备和相应网络的安全性已成为人们关注的焦点。本文旨在探讨物联网安全的重要性&#xff0c;同时简…

❀记忆冒泡、选择和插入排序算法思想在bash里运用❀

目录 冒泡排序算法:) 选择排序算法:) 插入排序算法:) 冒泡排序算法:) 思想&#xff1a;依次比较相邻两个元素&#xff0c;重复的进行直到没有相邻元素需要交换&#xff0c;排序完成。 #!/bin/bash arr(12 324 543 213 65 64 1 3 45) #定义一个数组 n${#arr[*]} #获取数组…

Canal+RabbitMQ实现MySQL数据同步至ClickHouse

ClickHouse作为一个被广泛使用OLAP分析引擎&#xff0c;在执行分析查询时的速度优势很好的弥补了MySQL的不足&#xff0c;但是如何将MySQL数据同步到ClickHouse就成了用户面临的第一个问题。本文利用Canal来实现ClickHouse实时同步MySQL数据&#xff0c;使用RabbitMQ来做消息队…

01、Kafka ------ 下载、安装 ZooKeeper 和 Kafka

目录 Kafka是什么&#xff1f;安装 ZooKeeper下载安装启动 zookeeper 服务器端启动 zookeeper 的命令行客户端工具 安装 Kafka下载安装启动 Kafka 服务器 Kafka是什么&#xff1f; RabbitMQ的性能比ActiveMQ的性能有显著提升。 Kafka的性能比RabbitMQ的性能又有显著提升。 K…

神经网络:经典模型热门模型

在这里插入代码片【一】目标检测中IOU的相关概念与计算 IoU&#xff08;Intersection over Union&#xff09;即交并比&#xff0c;是目标检测任务中一个重要的模块&#xff0c;其是GT bbox与pred bbox交集的面积 / 二者并集的面积。 下面我们用坐标&#xff08;top&#xff0…