5、java中的数组

1、简介

数组是一种具有随机存取特性的数据结构,是内存上一段连续区域的表示,是实现顺序存储的基础,数组只能用于存储同一类型的数据。数组的长度在初始化时定义之后就不可更改,并且在初始化数组时必须指定数组的长度。

2、数组的声明和赋值

这里用一维数组为例,创建数组有以下两种方式,一是声明时直接赋值,而是先声明后赋值。

第一种:

Int []array = {1,2,3} ;//声明并给数组赋值,长度为3

第二种:

Int []array = new int[3];//声明一个长度为3的数组,这个时候在堆中已经开辟了空间,长度为3

array[0] = 1;

array[1] = 2;

array[2] = 3;//赋值

这里注意的是数组的下标是从0开始的,例如声明一个长度为3的数组,那么他的最后一个下标是2,当给下标大于2的元素赋值时就会报错。

3、内存分配

数组是引用数据类型,当声明一个长度为len数组时,就会在堆内存中开辟一段连续长度为len的区域,然后栈中的变量的值则存储的是指向数组第一个元素的地址,也就是下标为0的元素的地址。

现在用2中声明的数组来说名一下内存的分配情况,int []array = new int[3];这样创建一个数组时,在栈中则会开辟一个空间存储变量名array,在堆中开辟3块连续的并且每一块占用的空间是相同的空间,而array变量的值则是堆中3块连续空间的第一块空间的地址,以后不管是设置数组值还是获取数组值时都直接根据地址进行设置即可,例如这里声明的是int数组,那么每一个元素占4个字节大小的空间,则会在内存中开辟3块连续的并且每一块空间长度都是4个字节大小的空间,然后array的值是一个块空间的地址值,假如array=0x1234,那么array[0]=0x1234,array[1] = 0x1234+4*1=0x1238,这样便使得数组具有随机存取的特性,这也是数组为什么只能存储同一类型数据的根本原因。

基本内存分配情况如下图:

4、基本操作

对于数组的操作无非就是设置、获取、遍历、排序和求最值

设置值就不说了,说一下其他几个。

获取数组中的值,直接根据数组的下标获取即可,例如想获取array中第二个元素的值,则直接使用array[1]来获取即可。

遍历数组的值,遍历的概念就是将数组中的值挨个获取一遍,这个时候就可以使用循环语句来获取即可,这里说一下数组有一个属性length,可以获取数组的长度。

for(int i=0 ; i <array.length; i++){System.out.println(array[i]);//根据下标获取每一个值}

给数组中的元素进行排序,实现数组排序的方式有很多算法,可以尝试着去了解一下,这里就不细说了(有一篇文章详细的介绍了排序算法),只要记住没有什么问题是不能通过使用一个中间层来解决的就可以了,java中提供了处理数组的工具类Arrays,其中的sort方法直接可以实现数组的排序

求最值的操作,这里先说一下,java已经提供了Arrays类来处理数组,开发时直接使用即可,这里简单的说一下实现的过程,就是借助一个临时变量,然后遍历每一个数组的元素,比较每一个元素,将每一次的较大值存放在临时变量中,当数组变量结束时临时变量便是最大值

int max = array[0];//假设最大值是array[0]for(int i=1 ; i<array.length;i++){if(array[i] > max){max = array[i];}}System.out.println(“最大值是max=”+max);

5、二维数组

二维数组没什么好说的,二维数组就是一个每一个元素都是一维数组的一维数组,创建方式如下:

创建一个二维数组,他的长度是2,元素是长度为3的一维数组

Int [][]array = new int[2][3];//

或者:

Int [][]array = {{1,2,3},{1,2,3}};

对于二维数组的操作和一维数组相同,只是多一层循环而已,就是先处理二维数组的每一个元素,又因为每一个元素是一维数组,又要循环处理每一个元素。

需要自己动手去测试,动脑去思考。

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

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

相关文章

jzoj1403-渡河【SPFA】

正题 题目链接:https://jzoj.net/senior/#contest/show/2940/1 题目大意 一个n∗nn*nn∗n的图&#xff0c;从000走到111价格为1。kkk个询问&#xff0c;询问一个点离边界的最小价格。 解题思路 反向从边界开始跑SPFASPFASPFA即可。 codecodecode #pragma GCC optimize(&quo…

动态规划训练19、最短路 [Help Jimmy POJ - 1661 ]

Help Jimmy POJ - 1661 题意&#xff1a;大致是一个人从某个点开始下落&#xff0c;下落的速度是1m/s&#xff0c;然后在平台上的时候可以左右移动&#xff0c;移动的速度也是1m/s&#xff0c;但是这里有一个限制&#xff0c;就是说每次下落的距离不能超过一个给定的数值。问你…

【活动(北京)】Global Azure Bootcamp

活动议程活动内容08:30-08:50报到08:50-09:10活動开场Study4 - 陈科融(MVP)STB Chain Foundation - 劉海峰(MVP)MVP Program - Christina Liang(MVP CPM)09:10-10:00区块链让软件资产化成为现实刘海峰(MVP) - STBChain Foundation主席10:10-11:00基于Azure PaaS的网站应用刘元纶…

jzoj1404-菱形内的计数【模拟】

正题 题目链接:https://jzoj.net/senior/#main/show/1404 题目大意 给出一个菱形中有一些边&#xff0c;求有多少个中间没有边的平行四边形。 解题思路 我们将一个平行四边形拆成两个等腰三角形和一个平行于菱形中间对角线的平行四边形&#xff0c;我们可以判断上面那个等腰…

6、java中的排序算法

1、简介 排序是将元素按着指定关键字的大小递增或递减进行数据的排列&#xff0c;排序可以提高查找的效率 2、排序算法的分类 排序算法可大致分为四类七种&#xff0c;具体分类如下&#xff1a; 插入排序&#xff1a;直接插入排序、希尔排序 交换排序&#xff1a;冒泡排序、…

用.NET Core实现装饰模式和.NET Core的Stream简介

该文章综合了几本书的内容.某咖啡店项目的解决方案某咖啡店供应咖啡, 客户买咖啡的时候可以添加若干调味料, 最后要求算出总价钱.Beverage是所有咖啡饮料的抽象类, 里面的cost方法是抽象的. description变量在每个子类里面都需要设置(表示对咖啡的描述).每个子类实现cost方法, …

动态规划训练20 [Treats for the Cows POJ - 3186 ]

Treats for the Cows POJ - 3186 简单的区间DP&#xff0c;就不解释了。 #include<iostream> #include<cstdio> using namespace std; const int INF1e9; const int maxn2005; int n, a[maxn]; int dp[maxn][maxn]; int main() {scanf("%d",&n);for(…

7、java中的面向对象思想和体现

java是一种面向对象的程序设计语言&#xff0c;在程序中使用对象来描述具体的事物&#xff0c;当多个事物具有共同的特点时&#xff0c;可以将事物的共同特点进行抽象&#xff0c;然后封装成一个包含事物共同特点的集合&#xff0c;在java中叫做封装成一个类&#xff0c;可以将…

jzoj1405-电缆建设【贪心,最小生成树】

正题 题目链接:https://jzoj.net/senior/#main/show/1405 题目大意 两个平行于xxx轴的线上有若干个点&#xff0c;求连接所有点需要多少距离的线。 解题思路 在同一平行线上的相邻的连边&#xff0c;然后在不同的上面的话就离最近的两个&#xff0c;跑最小生成树即可。 code…

动态规划训练21 [FatMouse and Cheese HDU - 1078 ]

FatMouse and Cheese HDU - 1078 这道题需要说一说&#xff0c;定义dp[x][y]表示从点(x,y)出发&#xff0c;每次走不超过k步&#xff0c;所能吃到的最大量。 有点难搞的是&#xff0c;这里递归的顺序不好确定&#xff0c;所以采用自顶向下的记忆化搜索的方式&#xff08;不用担…

这个拖后腿的“in”

问题之源C# 7.2推出了全新的参数修饰符in&#xff0c;据说是能提升一定的性能&#xff0c;官方MSDN文档描述是&#xff1a;Add the in modifier to pass an argument by reference and declare your design intent to pass arguments by reference to avoid unnecessary copyin…

P4310-绝世好题【位运算,dp】

正题 题目链接:https://www.luogu.org/problem/P4310 题目大意 一个长度为nnn的序列&#xff0c;求一个最长的子序列使得每个数&\&&前一个数不为0。 解题思路 因为是&\&&不为0&#xff0c;所以只要有一位都为1即可。 用fif_ifi​表示以第iii个结尾…

8、java中的内部类

根据类定义时所在的位置不同可以将内部类分为四大类&#xff1a;成员内部类、方法内部类、静态内部类、匿名内部类。 成员内部类 顾名思义成员内部类定义在外部类的成员变量位置&#xff0c;相当于外部类的一个成员。将成员内部类当成当前封装类中的一个成员即可&#xff0c;…

Surging 微服务框架使用入门

前言本文非 Surging 官方教程&#xff0c;只是自己学习的总结。如有哪里不对&#xff0c;还望指正。 我对 surging 的看法我目前所在的公司采用架构就是类似与Surging的RPC框架&#xff0c;在.NET 4.0框架上搭建Socket RPC&#xff0c;通过分组轮询的方式调度RPC&#xff0c;经…

动态规划训练22 [Milking Time POJ - 3616 ]

Milking Time POJ - 3616 说实话这道题目非常简单&#xff0c;本质上就是 多段有向图的求最大值问题。稍微变化的地方在于这个的的有向边没有那么明显 &#xff0c;而是需要自己去寻找 如果任务i到任务j之间存在有向边的话&#xff0c;那么一定有这个关系成立&#xff0c;即&a…

jzoj3888-正确答案【字符串hash,dfs】

正题 题目大意:https://jzoj.net/senior/#main/show/3888 题目大意 nnn个人mmm道题&#xff0c;已知道每个人的选项和有ppp个人满分和qqq个人零分&#xff0c;求字典序最小的可能的正确答案。 解题思路 用字符串hashhashhash判断即可。要注意的是如果没有一个人满分也没有一个…

9、java中的异常处理机制

Java中的异常&#xff08;Throwable&#xff09;分为两类&#xff1a;异常Execption和错误Error。 Error&#xff0c;也就是错误&#xff0c;这个是不可避免的&#xff0c;出现的问题使得应用停止&#xff0c;例如&#xff1a;服务器损坏、内存溢出等。在java中所有的错误都继承…

RabbitMQ教程C#版 - 工作队列

先决条件本教程假定RabbitMQ已经安装&#xff0c;并运行在localhost标准端口&#xff08;5672&#xff09;。如果你使用不同的主机、端口或证书&#xff0c;则需要调整连接设置。从哪里获得帮助如果您在阅读本教程时遇到困难&#xff0c;可以通过邮件列表联系我们。1.工作队列&…

动态规划训练23 [Making the Grade POJ - 3666 ]

Making the Grade POJ - 3666 这道题目有点意思。 我们定义dp[i][j]表示的含义是把包含前i个元素的子序列变成非递减的子序列&#xff0c;并且最后一个元素变成j所需要耗费的最小代价 那么状态转移方程可以写出来就是&#xff1a; dp[i][j] min(dp[i-1][k] abs(num[i] - j…

jzoj3889-序列问题【dp,高精度】

正题 题目链接:https://jzoj.net/senior/#main/show/3889 题目大意 一个序列nnn&#xff0c;求两个集合S,T∈[1..n]S,T\in[1..n]S,T∈[1..n]使得ax(x∈S)a_x(x\in S)ax​(x∈S)的xorxorxor和就是ay(y∈T)a_y(y\in T)ay​(y∈T)的andandand和&#xff0c;且x<y(x∈S,y∈T)x…