Java——数组的定义与使用
数组的定义与使用
1.数组的基本概念
(1)数组的动态初始化:
数组首先先开辟内存空间,而后再使用索引进行内容的设置,这种定义数组的方式称为动态初始化
数组是引用数据类型,存在有内存分配问题。在使用前一定要开辟空间(实例化),否则就会产生NullPoninterException
|
数组的动态初始化(声明并开辟数组) 数据类型[ ] 数组名 = new 数据类型[数组长度] |
数组的分步初始化: 数据类型[ ] 数组名 = null; 数组名 = new 数据类型[数组长度] |
当数组开辟空间之后,就可以采用如下方式对数组进行操作:
1.数组可以通过索引完成,即“数组名[索引]”;
注意:数组索引从0开始,所以索引的范围为:0——(数组长度-1)如果访问的值超过数组长度,会产生 “java.lang.ArrayIndexOutOfBoundsException”异常。
2.当数组动态初始化开辟空间后,数组中每个元素都是该数据类型的默认值。
3.数组是一个有序的集合操作,所以对于数组的内容操作往往采用循环操作(for循环)。
4.Java中可采用 数组名.length 来获取数组长度。
|
public class Test7 { public static void main(String[] args){ int[] demon = new int[4];//开辟一个长度为10的整型数组 System.out.println(demon.length);//求数组的长度 demon[0] = 0;//数组的第一个元素 demon[1] = 1; demon[2] = 2; for(int i = 0;i < demon.length;i++){ System.out.print(" "); System.out.print(demon[i]);//打印数组的元素 } } } |
|
运次结果:10 0 1 2 0 |
(2)数组的动态初始化:
数组在定义的同时可以设置内容,则称为数组的静态初始化。
|
数据类型[] 数组名 = {值1……} |
数据类型[] 数组名 = new 数据类型[] {值……}(推荐使用) |
|
public class Test7 { //数组静态初始化(简化格式) public static void main(String[] args){ int[] demon1 ={2,3,5,6,9,11}; System.out.println(demon1.length); for(int i = 0;i < demon1.length;i++){ System.out.println(demon1[i]); } } } |
|
运行结果:6 2 3 5 6 9 |
|
public class Test7 { //数组静态初始化(完成格式)**推荐使用 public static void main(String[] args){ System.out.println(new int[]{1,2,3,4,5}.length);//匿名数组 } } |
|
运行结果:5 |
2.数组的引用传递
数组作为引用数据类型,也一定存在引用传递。
|
public class Test7 { public static void main(String[] args) { int[] demon = null ; demon = new int[4] ; demon[0] = 0 ; // 数组第一个元素 demon[1] = 1 ; // 数组第二个元素 demon[2] = 2 ; // 数组第三个元素 for (int i = 0; i<demon.length ; i++) { System.out.println(demon[i]) ; // 通过循环控制索引下标更改 } } } |
通过上述例子,我们来探讨内存分配的问题:
引用传递空间:同一块堆内存可被多个栈内存所指向。如下例:内存分析见下。
|
public class Test7 { public static void main(String[] args) { int[] demon = new int[4] ; int[] temp = null; System.out.println(demon.length); demon[0] = 0 ; // 数组第一个元素 demon[1] = 1 ; // 数组第二个元素 demon[2] = 2 ; // 数组第三个元素 for (int i = 0; i<demon.length ; i++) { System.out.println(demon[i]) ; // 通过循环控制索引下标更改 } temp = demon; temp[0] = 20; System.out.println(demon[0]); } } |
|
运行结果:4 0 1 2 0 20 |
内存分析图:
数组最大的缺陷:长度固定。
3.二维数组
二维数组(数组的数组):二维数组本质上指的就是一个行列的集合。换言之,如果要获得一个数据,既需要行索引,也需要列索引。
要获取二维数组中的元素:数组名[行索引][列索引]
二维数组的初始化:
|
动态初始化: 数据类型[][] 数组名 = new 数据类型[行个数][列个数] |
静态初始化: 数据类型[][] 数组名 = new 数据类型[][]{{值……},……{值……}} |
|
public class Test7 { //二维数组 //数组并不是等列数组 public static void main(String[] args){ int[][] demon3 = new int[][]{{1,3},{5,7,9},{2,4}}; //打印二维数组要使用双重循环 for(int i = 0;i< demon3.length;i++){ for(int j =0;j<demon3[i].length;j++){ System.out.print(demon3[i][j]+" "); } } } } 4.数组和方法的互操作数组是引用数据类型,所有引用数据类型都可以为其设置多个栈内存所指向;所以在进行对数组的操作时,可以通过其他方式处理。 (1)方法接收数组 (2)方法返回数组 (3)方法修改数组
内存分析图如下: 5.Java对数组的支持1.对数组进行排序: 只要是基本数据类型的数组,sort方法都可以进行排序处理(升序处理)。 数组排序 : java.util.Arrays.sort(数组名称)
2.实现数组的拷贝: 数组拷贝:指的是将一个数组的部分内容替换掉另一个数组的部分内容(必须是连续的)。 System.arraycopy(源数组名称,源数组开始点,目标数组名称,目标数组开始点,拷贝长度)
6.数组案例给出以下数组,要求可以统计出该数组的最大值、最小值、平均值、总和。
(1)简单的实现方法实现
由上述代码可以看出:主函数中代码量大,代码比较凌乱;主方法相当于客户端调用,代码应越简单越越好。 (2)使用方法与数组互操作实现
使用如上方式使得逻辑比较清晰,主函数中代码量减少。 7.对象数组可以看出前面所定义的都是基本数组,对象数组往往是以引用数据类型为主的定义;对象数组中保存的内容要比普通类型多;如:接口、类。 (1)对象数组的动态初始化
(2)对象数组的静态初始化
|
|||||||||||||||||||||||||||||||||
|
运行结果:1 3 5 7 9 2 4 |
Java——数组的定义与使用的更多相关文章
- JAVA数组的定义及用法
数组是有序数据的集合,数组中的每一个元素具有同样的数组名和下标来唯一地确定数组中的元素. 1. 一维数组 1.1 一维数组的定义 type arrayName[]; type[] arrayName; ...
- java 数组声明定义 数组内存分配 数组初始化 数组引用 数组的遍历
一,数组的定义 Java 中定义数组的语法有两种: 1. type arrayName[]; 2. type[] arrayName;type 为Java中的任意数据类型,包括基本类型和组合类型,ar ...
- Java数组的定义和使用
如果希望保存一组有相同类型的数据,可以使用数组. 数组的定义和内存分配 Java 中定义数组的语法有两种: type arrayName[]; type[] arrayName; type 为Java ...
- 10、Java 数组的定义和使用
1.数组的定义 首先举一个小例自:如果你现在需要定义100个int类型的变量,那么按照前俩节的做法为: int a = 1, b=2 , c=3.......; 可以发现我们的代码特别的冗余,而且不美 ...
- JAVA数组的定义以及使用1
public class HelloWorld { public static void main(String[] args){ // Scanner s = new Scanner(System. ...
- JAVA数组的定义方式
JAVA中,数组有以下几种定义方式: 1.先定义数组中元素的个数,然后再进行元素赋值 int[] a=new int[2]; a[0]='a'; a[1]='b';a[2]='c'; 2.元素个数与元 ...
- java数组的定义
class ArrayDome { public static void main(String[] args) { //元素类型[] 数组名 创建一个 元素类型[元素个数或数组长度] /* 需要一个 ...
- Java 数组的定义和遍历
1.一维数组 数组是用来存储一组相同数据类型数据的数据结构 数组的元素可以是简单数据类型的数据,也可以是引用数据类型的数据 无论数组内容是简单类型还是引用类型,数组自己本身都是一种引用类型 每个数组元 ...
- java 数组的定义
package java03; /* 数组的初始化:就是创建一个数组,并向其中古语一些默认的值 两种常见的初始化方式: 1.动态初始化(指定长度) 2.静态初始化(指定内容) 动态初始化数组格式: 数 ...
随机推荐
- oracle 定时任务增、删、改、查
增: 创建一个计划任务 begin sys.dbms_job.submit(job=>:job, what=>'要定时执行的存储过程名:',--例如:包名.存储过程名; 记得写分号 ne ...
- 使用Abp vnext构建基于Duende.IdentityServer的统一授权中心(一)
原来看到很多示例都是基于IdentityServer4的统一授权中心,但是IdentityServer4维护到2022年就不再进行更新维护了,所以我选择了它的升级版Duende.IdentitySer ...
- eclipse下的python环境安装
添加python开发环境到eclipse: 点击help--install New Software 点击add,弹出新窗口: Name:填PyDev Location:填 http://pyde ...
- Java安全之基于Tomcat的通用回显链
Java安全之基于Tomcat的通用回显链 写在前面 首先看这篇文还是建议简单了解下Tomcat中的一些概念,不然看起来会比较吃力.其次是回顾下反射中有关Field类的一些操作. * Field[] ...
- [hdu6974]Destinations
注意到一个人的三条链一定不会同时选(忽略仅选一个终点的限制),因为其有公共点(起点) 换言之,问题相当于给定$3m$条链,选择$m$条没有公共点的链,并最小化代价和 进一步的,显然也不存在多于$m$条 ...
- [luogu4548]歌唱王国
(可以参考hdu4652,因此推导过程比较省略) 类似的定义$f_{i}$和$g_{i}$,同样去插入$len$个字符,但注意到并不是任意一个位置都可以作为结尾,$i+j$可以作为结尾当且仅当$s[0 ...
- oracle 创建空间索引
1. 首先进行查询,判断数据是否已经建立相应的空间元数据 select * from user_sdo_geom_metadata t where t.table_name like '%表名%'; ...
- 21天从Java转向Go之第三天——初出茅庐
名称 Go中25个关键字 只能在语法允许的地方使用,不能做为名称 break default func interface select case defer go map struct chan e ...
- python网络自动化运维之环境搭建(EVE-NG+pycharm)
参考了很多资料,发现现在很多环境用的都是GNS3加linux下的python,几乎没有是用EVE-NG加上pycharm的教程,EVE的功能如此强大,存在的教程却较少,这里我出一篇教程供使用EVE作为 ...
- Break up CF700C
Break up CF700C 首先考虑只能删一条边的做法,我们可以找出所有的桥,然后随便跑一条 S 到 T 路径,如果这条路径上有桥就说明可以,否则不行 发现这个做法其实是 O(M) 的 那么可以先 ...