五、Java数组

news/2025/12/7 22:29:21/文章来源:https://www.cnblogs.com/snmwyl/p/19319014

1. 数组概述

  • 数组是相同数据类型的有序集合
  • 数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成
  • 其中,每一个数据称作一个数组元素,可以通过下标访问每个数组元素

2. 数组声明创建

2.1 代码

package com.snmwyl.array;public class Demo1 {public static void main(String[] args) {//声明数组变量int[] nums;   //或 int nums[];//使用new操作符来创建数组nums = new int[10];//通过索引访问数组元素,数组索引从0开始for (int i = 0; i < 10; i++) {nums[i] = i + 1;}for (int i = 0; i < 10; i++) {System.out.print(nums[i] + " ");   //1 2 3 4 5 6 7 8 9 10}System.out.println();//获取数组长度 nums.length//计算所有元素的和int sum = 0;for (int i = 0; i < nums.length; i++) {sum += nums[i];}System.out.println(sum);   //55//数组下标越界System.out.println(nums[11]);   //java.lang.ArrayIndexOutOfBoundsException}
}

2.2 Java内存分析

(1) 堆

  • 存放new的对象和数组
  • 可以被所有的线程共享,不会存放别的对象引用

(2) 栈

  • 存放基本变量类型(包含这个基本类型的具体数值)
  • 引用对象的变量(会存放这个引用在堆里面的具体地址)

(3) 方法区

  • 可以被所有的线程共享
  • 包含了所有的class和static变量

2.3 三种初始化

(1) 静态初始化

(2) 动态初始化

(3) 数组的默认初始化

  • 数组是引用类型,它的元素相当于类的实例变量,因此数组一经分配空间,其中的每个元素也被按照实例变量同样的方式被隐式初始化

(4) 代码

package com.snmwyl.array;public class Demo2 {public static void main(String[] args) {//静态初始化   创建+赋值int[] a = {1,2,3};Man[] mans = {new Man(), new Man()};System.out.println(a[0]);   //1//动态初始化   包含默认初始化int[] b = new int[5];b[0] = 10;System.out.println(b[0]);   //10}
}

2.4 数组的四个基本特点

  • 其长度是确定的。数组一旦被创建,它的大小就是不可以改变的。
  • 其元素必须是相同类型,不允许出现混合类型。
  • 数组中的元素可以是任何数据类型,包括基本类型和引用类型。
  • 数组变量是引用类型,数组也可以看成是对象,数组中的每个元素相当于该对象的成员变量。数组本身就是对象,Java中对象是在堆中的,因此数组无论保存原始类型还是其他对象类型,数组对象本身是在堆中的。

2.5 数组边界

  • 下标的合法区间 [0,length - 1]
  • ArrayIndexOutOfBoundsException 数组下标越界异常

3. 数组使用

3.1 For-Each 循环

package com.snmwyl.array;public class Demo3 {public static void main(String[] args) {int[] arrays = {1,2,3,4,5};//打印全部的数组元素for(int i=0; i<arrays.length; i++){System.out.print(arrays[i]+" ");   //1 2 3 4 5}System.out.println();System.out.println("==========");//计算所有元素的和int sum = 0;for(int i=0; i<arrays.length; i++){sum += arrays[i];}System.out.println(sum);System.out.println("==========");//查找最大元素int max = arrays[0];for(int i=1; i<arrays.length; i++){if(arrays[i] > max){max = arrays[i];}}System.out.println(max);}
}

3.2 数组作方法入参

package com.snmwyl.array;public class Demo4 {public static void main(String[] args) {int[] arrays = {1,2,3,4,5};//增强for循环 JDK1.5 没有下标 适合打印输出 arrays.forfor (int array : arrays) {System.out.print(array + " ");   // 1 2 3 4 5}System.out.println();//数组作方法入参printArray(arrays);   // 1 2 3 4 5System.out.println();//数组作返回值int[] reverse = reverseArray(arrays);printArray(reverse);   // 5 4 3 2 1}//打印数组元素public static void printArray(int[] arrays) {for (int i = 0; i < arrays.length; i++) {System.out.print(arrays[i] + " ");}}//反转数组public static int[] reverseArray(int[] arrays) {int[] result = new int[arrays.length];for (int i = 0,j = arrays.length - 1; i < arrays.length; i++,j--) {result[j] = arrays[i];}return result;}
}

3.3 数组作返回值

示例代码同3.2

4. 多维数组

4.1 含义

  • 多维数组可以看成是数组的数组,比如二维数组就是一个特殊的一维数组,其每一个元素都是一个一维数组
  • 二维数组
//两行五列的数组
int a[][] = new int[2][5];

4.2 代码

package com.snmwyl.array;public class Demo5 {public static void main(String[] args) {/*[2][3]1,2,3 array[0]4,5,6 array[1]*/int[][] array= {{1,2,3},{4,5,6}};System.out.println(array[0]);   //[I@776ec8dfprintArray(array[0]);   // 1 2 3System.out.println(array[1][1]);   // 5System.out.println(array.length);   // 2System.out.println(array[0].length);   // 3for (int i = 0; i < array.length; i++) {for (int j = 0; j < array[i].length; j++) {System.out.print(array[i][j] + " ");}System.out.println();}}//打印数组元素public static void printArray(int[] arrays) {for (int i = 0; i < arrays.length; i++) {System.out.print(arrays[i] + " ");}System.out.println();}
}

5. Arrays类

5.1 简介

  • 数组的工具类java.util.Arrays
  • Arrays类中的方法static修饰的静态方法,在使用的时候可以直接使用类名进行调用,而不用使用对象来调用
  • 常用功能:

​ 给数组赋值:fill

​ 对数组排序:sort(升序)

​ 比较数组:equal

​ 查找数组元素(对排好序的数组进行二分查找):binarySearch

5.2 示例代码

package com.snmwyl.array;import java.util.Arrays;public class Demo6 {public static void main(String[] args) {int[] a = {1,5,4,2,3};System.out.println(a);   // [I@776ec8dfSystem.out.println(a[0]);   // 1System.out.println(Arrays.toString(a));   // [1,5,4,2,3]Arrays.sort(a);    //升序排序System.out.println(Arrays.toString(a));   // [1,2,3,4,5]Arrays.fill(a,1,3,6);   //a[1]~a[2]填充System.out.println(Arrays.toString(a));   // [1,6,6,4,5]Arrays.fill(a, 2);   //数组填充System.out.println(Arrays.toString(a));   // [2,2,2,2,2]}
}

5.3 冒泡排序

  • 两层循环,外层冒泡轮数,内层依次比较
  • 时间复杂度O(n^2)
package com.snmwyl.array;import java.util.Arrays;public class Demo7 {public static void main(String[] args) {//冒泡排序int[] a = {1,3,4,5,2};sort(a);System.out.println(Arrays.toString(a));   // [1,2,3,4,5]}public static void sort(int[] a) {//外层循环,比较轮数for (int i = 0; i < a.length - 1; i++) {boolean flag = true;   //优化,减少没有意义的比较//内层循环,每轮比较次数for (int j = 0; j < a.length - i - 1; j++) {if(a[j] > a[j+1]) {int temp = a[j];a[j] = a[j+1];a[j+1] = temp;flag = false;}}if(flag) {break;}}}
}

6. 稀疏数组

package com.snmwyl.array;public class Demo8 {public static void main(String[] args) {//创建一个11*11的二维数组,0:没有棋子,1:黑棋,2:白棋int[][] array1 = new int[11][11];array1[1][2] = 1;array1[2][3] = 2;//输出原始数组System.out.println("原始数组为:");for (int[] ints : array1) {for (int anInt : ints) {System.out.print(anInt + "\t");}System.out.println();}System.out.println("========================================");//创建稀疏数组int sum = 0;for (int[] ints : array1) {for (int anInt : ints) {if (anInt != 0) {sum ++;}}}int[][] array2 = new int[sum+1][3];array2[0][0] = 11;array2[0][1] = 11;array2[0][2] = sum;int line = 1;for (int i = 0; i < array1.length; i++) {for (int j = 0; j < array1[i].length; j++) {if(line > sum) break;if (array1[i][j] != 0) {array2[line][0] = i;array2[line][1] = j;array2[line][2] = array1[i][j];line++;}}}//输出稀疏数组System.out.println("稀疏数组为:");for (int[] ints : array2) {for (int anInt : ints) {System.out.print(anInt + "\t");}System.out.println();}System.out.println("========================================");//还原稀疏数组int[][] array3 = new int[array2[0][0]][array2[0][1]];int temp1 = 0;int temp2 = 0;int temp3 = 0;for (int i = 1; i < array2.length; i++) {array3[array2[i][0]][array2[i][1]] = array2[i][2];}//输出还原数组System.out.println("还原稀疏数组为:");for (int[] ints : array3) {for (int anInt : ints) {System.out.print(anInt + "\t");}System.out.println();}}
}

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

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

相关文章

122_尚硅谷_init函数

122_尚硅谷_init函数1.init基本介绍 2.如果一个文件同时包含全局变量, init函数和main函数, 那么执行的顺序是:全局变量定义_init函数_main函数 3.utils包中有init会在main中导入后,先执行utils.go文件中的init

《安全测试指南》——会话管理测试【学习笔记】

【会话管理测试】*部分括号内容均为个人理解 。 1. 会话管理架构绕过测试(OTG-SESS-001)主要测试会话cookie是否不可预测。攻击模式:cookie搜集(搜集足够数量的cookie样本)cookie逆向工程(分析Cookie生成算法) …

氛围编程工具个人推荐

氛围编程工具个人推荐大模型推理能力(脑子) > 编辑器功能(手)。它更推崇拥有强大逻辑架构能力的模型(如Claude),而不是单纯的IDE集成工具。第一梯队 (First Echelon):主力军这一层级是作者认为完成“Vibe C…

Windows 11全面AI化:语音助手与自主代理技术解析

某中心对Windows 11进行大规模改造,引入了“Hey Copilot”语音唤醒、可分析屏幕内容的Copilot Vision以及能自主操控电脑完成任务的Copilot Actions等AI功能。这些技术构建了全新的人机交互模式,并涉及新的安全架构以…

20251207

明天试试自己独立完成老师布置的作业

MyBatis自定义拦截器

在Spring Boot中配置MyBatis拦截器的核心是将自定义拦截器注册到MyBatis的SqlSessionFactory中(MyBatis所有拦截器都需通过该工厂注册才能生效)。以下是完整、分场景的配置方案,包含基础配置、多拦截器、属性定制、…

网线大鲨鱼

使用wireshark打开下载文件,搜索字符串ctf,选择分组字节流发现flag,/?s=moectf%7Bw1r3shark_1s_s0_3asy%7D&_pjax=%23page 解码获得最终flag:moectf{w1r3shark_1s_s0_3asy}

深入解析:mysql内置函数——了解常用的函数

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

【P1】win10安装 Docker教程 - 详解

【P1】win10安装 Docker教程 - 详解2025-12-07 22:11 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !imp…

csq-蓝桥杯python-基础语法1-逻辑运算与条件语句

csq-蓝桥杯python-基础语法1-逻辑运算与条件语句一、什么是逻辑运算?在 Python 中,比较运算(如 > < ==)的结果是布尔值 True 或 False。 实际开发中经常需要组合多个条件,例如:年龄大于 18 并且身高大于 1…

高级语言程序设计第八次个人作业

这个作业属于哪个课程:https://edu.cnblogs.com/campus/fzu/gjyycx 这个作业要求在哪里: https://edu.cnblogs.com/campus/fzu/gjyycx/homework/15590 学号:102400111 姓名:蔡伟仡 一.编写并运行书本第11章11.13编…

Cor1e的支票

打开下载文件,看见。!?三个符号,想到OoK加密将。改成OoK.,!改成OoK!,?改成OoK?在https://www.dcode.fr/ook-language 解密,获得flag

卷积神经网络是从多层感知机基础上发展起来的吗?

卷积神经网络是从多层感知机基础上发展起来的吗? 在深度学习的发展历程中,卷积神经网络(CNN)和多层感知机(MLP)是两大核心架构,二者时常被放在一起比较。一个常见的疑问是:卷积神经网络是否从多层感知机的基础…

gaussdb json解析

gaussdb (GaussDB Kernel 503.1.0.SPC1200 build c28d95e9) -- 序列 CREATE SEQUENCE seq_head_id START WITH 1; CREATE SEQUENCE seq_line_id START WITH 1;-- 头表 CREATE TABLE head_t (head_id BIGINT PRIMARY KE…

详细介绍:python logging模块:专业日志记录

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

JAX核心设计解析:函数式编程让代码更可控

很多人刚接触JAX都会有点懵——参数为啥要单独传?随机数还要自己管key?这跟PyTorch的画风完全不一样啊。 其实根本原因就一个:JAX是函数式编程而不是面向对象那套,想明白这点很多设计就都说得通了。 先说个核心区别…

20232305 2025-2026-1 《网络与系统攻防技术》实验八实验报告

1.实验内容 1.1 学习Web前后端语言. 1.2 搭建一个简单的登录网站。 1.3 尝试对网站进行SQL注入,XSS,CSRF攻击。 2.实验过程 2.1 Web前端HTML 2.1.1 安装,启停Apache Apache是一种开源Web服务器软件,其核心功能是接…

患者投诉管理,是否正面临这些难题?

院长码上办 www.yzmsb.com医院投诉管理,是否正面临这些难题? 传统手工模式已难以满足 医院等级评审 与 患者服务提升 的双重挑战 渠道分散,数据孤岛意见箱没人投,电话记不住。投诉散落在各个角落,缺乏统一台账,极…

NOIP 游记

NOIP 游记考后光顾着玩了,给忘了 这几天一直在补文化课,12.7 号今天才有时间 因为各种原因吧,这是我学这么多年来第一篇游记 感觉有好多话要说,却不知道从何说起 感觉成绩倒是很小一部分,大多是有了很多感想 算了…