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

news2025/9/20 17:28:35

目录

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.coloradmin.cn/o/1354997.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CIFAR图片分类数据集

1. CIFAR介绍 官网链接&#xff1a;CIFAR-10 and CIFAR-100 datasets CIFAR-10是一个更接近普适物体的彩色图像数据集。CIFAR-10 是由Hinton 的学生Alex Krizhevsky 和Ilya Sutskever 整理的一个用于识别普适物体的小型数据集。一共包含10 个类别的RGB 彩色图片&#xff1a;飞机…

机器学习期末复习

机器学习 选择题名词解释&#xff1a;简答题计算题一、线性回归二、决策树三、贝叶斯 选择题 机器学习利用经验 &#xff0c;须对以下&#xff08;&#xff09;进行分析 A 天气 B 数据 C 生活 D 语言 归纳偏好值指机器学习算法在学习的过程中&#xff0c;对以下&#xff08;&a…

【Java基础篇】 try中return A,catch中return Bfinally中return C,最终返回值是什么?

try中return A&#xff0c;catch中return Bfinally中return C&#xff0c;最终返回值是什么? ✔️典型解析✔️拓展知识仓✔️finally 和 return 的关系 ✔️ final、finally、finalize有什么区别✔️final✔️finally✔️ finalize ✔️典型解析 最终的返回值将会是C 因为 fi…

计算机毕业设计-----SSM自习室图书馆座位预约管理系统

项目介绍 一款由jspssmmysql实现的图书馆预约占座管理系统&#xff0c;前端采用的是当下最流行的easyui框架&#xff0c;后台用的ssm&#xff08;spring、springMVC、mybaits&#xff09;框架.添加学生和教师时会自动在用户表中注册&#xff0c;定时任务会定时生成座位信息&am…

Cortex-M3 内核的中断优先级

第一步&#xff1a;分组&#xff08;一次&#xff09; 第二步&#xff1a;根据每个中断&#xff0c;设置抢占优先级&#xff08;根据分组可以知道可以几位设置&#xff09;&#xff0c;然后子优先级。 1. 中断编号 ARM 为 Cortex-M3 内核 一共设计了 255 个中断&#xff0c;编号…

【SpringBoot开发】之商城项目案例(订单及订单项生成)

&#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f389;&#x1f389; &#x1f3c5;我是君易--鑨&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f31f;推荐给大家我的博客专栏《SpringBoot开发之商城项目系列》。&#x1f3af…

Ubuntu无网络解决办法

1.进入root并输入密码 sudo su 2.更新NetworkManager的配置 用vim打开NetworkManager.conf vim /etc/NetworkManager/NetworkManager.conf 将第五行 managedFalse 改为 managedTrue 。 如果本身就是True就不用改了。 3.删除NetworkManager配置 service NetworkManager st…

Application layer

title: 应用层 date: 2023-12-20 21:03:48 tags: 知识总结 categories: 计算机网络 应用层&#xff1a;负责最直观的应用请求的封装、发起 一、域名系统DNS 连接在互联网上的主机不仅有IP地址&#xff0c;还有便于用户记忆的主机名字。域名系统DNS能够把互联网上的主机的名字…

看完这篇 教你玩转镜像转换神器qumu实现虚拟机做题自由!

前言&#xff1a; 最近有小伙伴说比赛没设备&#xff0c;问有没有不需要设备也能实现做题自由的方法&#xff0c;今天这里分享一期&#xff01; 看完这篇你将学会 使用qumu转换镜像格式 一般我们做题都是img格式的环境 需要导入设备&#xff0c;有些小伙伴没有设备 就可以使用…

擎创动态 | 某城商行案例入选信通院 GOLF+年度明星解决方案

2023年12月15日&#xff0c;“2023GOLF IT新治理领导力论坛”在京召开&#xff0c;该论坛由中国信息通信研究院、中国通信标准化协会主办。在此次论坛中&#xff0c;主办方正式发布了XOps领域年度评选结果。擎创科技“一体化智能根因定位解决方案”凭借优秀的落地实践成果&…

Navicat 技术干货 | 如何查看关系型数据库(MySQL、PostgreSQL、SQL Server、 Oracle)查询的运行时间

在数据库优化中&#xff0c;理解和监控查询运行时间是至关重要的。无论你是数据库管理员、开发人员或是参与性能调优的人员&#xff0c;知道如何查看查询运行时间能为你的数据库操作提供有价值的参考。本文中&#xff0c;我们将探索几款热门的关系数据库&#xff08;如 MySQL、…

门店总数超9000家,手握大众茶饮“下沉市场牌”的古茗冲刺上市

奶茶品牌上市潮来袭。1月2日&#xff0c;奶茶品牌古茗控股有限公司&#xff08;下称“古茗”&#xff09;、蜜雪冰城股份有限公司&#xff08;下称“蜜雪冰城”&#xff09;一同递交招股书&#xff0c;计划在港交所主板上市。 近年来&#xff0c;随着现制茶饮的爆火&#xff0…

vue-amap区域显示,3d棱柱效果

文章目录 一、在vue项目中安装和基本使用1. 安装2. 在vue项目中使用1. 在main.js中引入2. demo显示高德地图 二、显示区域三、只显示某个区域四、3D棱柱区域五、添加卫星图层 vue-amap中文文档&#xff1a; https://www.wenjiangs.com/doc/mdxkhhtr 一、在vue项目中安装和基本…

30道Nginx面试题含答案(很全)

1. 什么是Nginx&#xff1f; Nginx是一个 轻量级/高性能的反向代理Web服务器&#xff0c;他实现非常高效的反向代理、负载平衡&#xff0c;他可以处理2-3万并发连接数&#xff0c;官方监测能支持5万并发。 2. 为什么要用Nginx&#xff1f; 跨平台、配置简单、方向代理、高并…

nVisual如何实现数据中心资产管理

背景 随着信息技术的迅速发展&#xff0c;数据中心已经成为了企业信息化建设的重要基础设施之一。数据中心不仅承载着大量的企业数据和业务应用&#xff0c;而且也需要大量的资产投入来支持其运营和发展。 因此&#xff0c;数据中心资产管理的重要性也日益凸显&#xff0c;数…

单电阻落地扇电机驱动 DEMO 方案

SYNWIT DEMO方案 低压 PMSM 电机&#xff0c;软件上采用SVPWM空间电压矢量调制技术&#xff0c;直接闭环启动&#xff0c;相比传统方波效率提高15%&#xff0c;具有更小的谐波分量及转矩脉动&#xff0c;同时采用32位MCU芯片SWM201G6S7 SSOP28 封装为主控&#xff0c;为驱动算…

thinkadmin安装步骤

一,先cmd运行安装命令 ### 创建项目&#xff08; 需要在英文目录下面执行 &#xff09; composer create-project zoujingli/thinkadmin二,在confing中的database.php配置数据库 三,将仓库的data复制到app目录下 https://gitee.com/zoujingli/think-plugs-data 四,在cmd运…

ssm基于BS的仓库在线管理系统的设计与实现论文

摘 要 如今的时代&#xff0c;是有史以来最好的时代&#xff0c;随着计算机的发展到现在的移动终端的发展&#xff0c;国内目前信息技术已经在世界上遥遥领先&#xff0c;让人们感觉到处于信息大爆炸的社会。信息时代的信息处理肯定不能用之前的手工处理这样的解决方法&#x…

实验笔记之——下载数据到服务器

开发过程中经常需要把数据传到服务器上&#xff0c;太麻烦了&#xff0c;为此本博文记录采用百度云来传输数据 百度云 使用bypy包。 安装&#xff1a;pip install bypy 配置bypy连接百度网盘&#xff1a; 终端输入bypy info将命令行提示的链接复制到浏览器&#xff0c;并复制…

【webstorm中通过附加方式打开一个项目,这个项目本身有git,但是却看不到git的解决方法】

1、如图所示 设置-》版本控制-》未注册的根&#xff0c;选中后&#xff0c;再点加号&#xff0c;就可以了 2、如图所示 版本控制-》直接点加号-》选中项目路径&#xff0c;vcs选择git&#xff0c;点击确定就可以了