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.静态初始化(指定内容) 动态初始化数组格式: 数 ...
随机推荐
- Java Logback简易教程
本作品采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可. 一.前言 本文以一个简单的项目为例,一步步展示logback的同步和异步配置方法,并且配置的日志要求满足阿里巴巴Java开发手册- ...
- 解决一次gitlab因异常关机导致启动失败
解决一次gitlab因异常关机导致启动失败 目录 解决一次gitlab因异常关机导致启动失败 1. 服务器异常关机 2. gitlab服务 2.1 进入gitlab容器内部 2.2 检查gitlab各 ...
- 12组-Alpha冲刺-2/6
一.基本情况 队名:字节不跳动 组长博客:https://www.cnblogs.com/147258369k/p/15535639.html 小组人数:10人 二.冲刺概况汇报 侯钦凯 过去两天完成 ...
- 9组-Alpha冲刺-1/6
一.基本情况 队名:不行就摆了吧 组长博客:https://www.cnblogs.com/Microsoft-hc/p/15526668.html 小组人数: 8 二.冲刺概况汇报 谢小龙 过去两天 ...
- 大爽Python入门教程 3-3 循环:`for`、`while`
大爽Python入门公开课教案 点击查看教程总目录 for循环 可迭代对象iterable 不同于其他语言. python的for循环只能用于遍历 可迭代对象iterable 的项. 即只支持以下语法 ...
- 网络带宽和速度测试windows和linux用iperf工具
网络带宽和速度测试windows和linux用iperf工具 Iperf是一个网络性能测试工具.Iperf可以测试TCP和UDP带宽质量.Iperf可以测量最大TCP带宽,具有多种参数和UDP特性 ...
- 【JVM】JVM 概述、内存结构、溢出、调优(基础结构+StringTable+Unsafe+ByteBuffer)
什么是 JVM ? 定义 Java Virtual Machine - java 程序的运行环境(java 二进制字节码的运行环境) 好处 一次编写,到处运行 自动内存管理,垃圾回收功能 数组下标越界 ...
- [bzoj3123]森林
首先对于询问操作可以使用可持久化线段树来维护,对于连边操作对于两颗树中选取较小的树暴力练到另一个点上,点数可以用并查集然后只修改根的点数即可. 1 #include<bits/stdc++.h& ...
- Python实战:截图识别文字,过万使用量版本!(附源码!!)
前人栽树后人乘凉,以不造轮子为由 使用百度的图片识字功能,实现了一个上万次使用量的脚本. 系统:win10 Python版本:python3.8.6 pycharm版本:pycharm 2021.1. ...
- UOJ 422 - 【集训队作业2018】小Z的礼物(Min-Max 容斥+轮廓线 dp)
题面传送门 本来说要找道轮廓线 \(dp\) 的题目刷刷来着的?然后就找到了这道题. 然鹅这个题给我最大的启发反而不在轮廓线 \(dp\),而在于让我新学会了一个玩意儿叫做 Min-Max 容斥. M ...