Java之数组详解

一、数组的概念

数组(Array)是多个相同类型数据按一定顺序排列的集合,并使用一个名字命名,通过编号(索引)的方式对这些数据进行统一管理。数组是程序设计中的一种基本数据结构,用于存储相同类型的数据。在Java中,数组是一种对象,它存储在堆内存中,而数组名则引用这块连续空间的首地址。

二、数组的特点

1. 类型相同

数组中的元素必须是相同类型的数据。

2. 长度固定

数组一旦创建,其长度就固定了,不能动态地增加或减少。

3. 下标索引

数组元素通过下标访问,下标从0开始,最大值为数组长度减1。

4. 内存连续

数组在内存中是一段连续的空间,因此可以通过下标快速访问任意位置的元素。

三、数组的创建

在Java中,数组的创建可以通过两种方式进行:静态初始化和动态初始化。

1. 静态初始化

在创建数组时,直接指定数组中的元素。

int[] array1 = {1, 2, 3, 4}; // 创建一个包含4个int类型元素的数组
double[] array2 = {1.1, 2.2, 3.3}; // 创建一个包含3个double类型元素的数组
String[] array3 = {"Hello", "World", "Java"}; // 创建一个包含3个字符串元素的数组

2. 动态初始化

在创建数组时,只指定数组的长度,不直接指定数组中的元素。动态初始化后,数组中的元素会有默认值,对于数值类型,默认值为0;对于boolean类型,默认值为false;对于引用类型,默认值为null。

int[] array4 = new int[5]; // 创建一个包含5个int类型元素的数组,初始值都为0
boolean[] array5 = new boolean[3]; // 创建一个包含3个boolean类型元素的数组,初始值都为false
String[] array6 = new String[2]; // 创建一个包含2个字符串元素的数组,初始值都为null

四、数组的使用

1. 访问数组元素

通过下标可以访问数组中的元素。下标从0开始,最大值为数组长度减1。

int[] array = {1, 2, 3, 4, 5};
System.out.println(array[0]); // 输出:1
System.out.println(array[4]); // 输出:5

需要注意的是,如果访问的下标超出了数组的有效范围(即小于0或大于等于数组长度),则会抛出ArrayIndexOutOfBoundsException异常。

2. 修改数组元素

通过下标可以修改数组中的元素。

int[] array = {1, 2, 3, 4, 5};
array[0] = 10; // 将第一个元素修改为10
System.out.println(array[0]); // 输出:10

3. 获取数组长度

数组对象有一个length属性,用于获取数组中元素的个数。

int[] array = {1, 2, 3, 4, 5};
System.out.println(array.length); // 输出:5

4. 数组的遍历

遍历数组是指将数组中的所有元素都访问一遍,通常使用循环语句来实现。

int[] array = {1, 2, 3, 4, 5};
for (int i = 0; i < array.length; i++) {System.out.println(array[i]);
}

另外,还可以使用增强for循环(也称为foreach循环)来遍历数组,这种方式更加简洁,但不能在循环体内修改数组的值。

int[] array = {1, 2, 3, 4, 5};
for (int num : array) {System.out.println(num);
}

5. 数组作为方法的参数

数组可以作为方法的参数进行传递。在方法内部,可以通过下标访问数组中的元素。

public class Test {public static void printArray(int[] arr) {for (int num : arr) {System.out.println(num);}}public static void main(String[] args) {int[] array = {1, 2, 3, 4, 5};printArray(array);}
}

需要注意的是,在Java中,数组作为方法参数传递时,实际上是传递了数组的引用,而不是数组的副本。因此,在方法内部对数组进行修改,会影响到原数组。

五、数组的相关方法

Java提供了java.util.Arrays类,包含了一些用于操作数组的方法。

1. 排序

使用Arrays.sort()方法可以对数组进行排序。

int[] array = {5, 3, 8, 1, 2};
Arrays.sort(array);
System.out.println(Arrays.toString(array)); // 输出:[1, 2, 3, 5, 8]

2. 查找

使用Arrays.binarySearch()方法可以在有序数组中查找指定元素的下标。如果找到,则返回元素的下标;如果未找到,则返回负值,负值的绝对值减1表示插入点,即在该点插入元素后,数组仍然有序。

int[] array = {1, 2, 3, 4, 5};
int index = Arrays.binarySearch(array, 3);
System.out.println(index); // 输出:2

需要注意的是,Arrays.binarySearch()方法要求数组必须是有序的,否则会得到错误的结果。

3. 复制

使用Arrays.copyOf()方法可以复制数组。

int[] array = {1, 2, 3, 4, 5};
int[] copiedArray = Arrays.copyOf(array, array.length);
System.out.println(Arrays.toString(copiedArray)); // 输出:[1, 2, 3, 4, 5]

4. 填充

使用Arrays.fill()方法可以用指定的值填充数组。

int[] array = new int[5];
Arrays.fill(array, 666);
System.out.println(Arrays.toString(array)); // 输出:[666, 666, 666, 666, 666]

5. 转换为字符串

使用Arrays.toString()方法可以将数组转换为字符串表示形式。

int[] array = {1, 2, 3, 4, 5};
String str = Arrays.toString(array);
System.out.println(str); // 输出:[1, 2, 3, 4, 5]

六、多维数组

多维数组是数组的数组,即数组的元素本身也是一个数组。在Java中,多维数组可以是二维数组、三维数组等。

1. 二维数组

二维数组可以看作是一个表格,其中每个元素都是一个一维数组。

int[][] array = {{1, 2, 3},{4, 5, 6},{7, 8, 9}
};// 访问二维数组中的元素
System.out.println(array[0][1]); // 输出:2

二维数组的初始化也可以分为静态初始化和动态初始化。

// 静态初始化
int[][] array1 = {{1, 2, 3},{4, 5, 6},{7, 8, 9}
};// 动态初始化
int[][] array2 = new int[3][3];
for (int i = 0; i < array2.length; i++) {for (int j = 0; j < array2[i].length; j++) {array2[i][j] = i * 3 + j + 1;}
}

2. 三维数组及更高维数组

三维数组及更高维数组的概念与二维数组类似,只是数组的层次更多。在实际应用中,三维数组及更高维数组的使用相对较少。

七、数组的应用场景

数组在Java编程中有广泛的应用场景,例如:

1. 存储数据

用于存储一组相同类型的数据。

2. 算法实现

如排序算法、查找算法等。

3. 图形处理

如二维数组可以用于表示图像中的像素点。

4. 游戏开发

如二维数组可以用于表示游戏地图中的格子。

八、综合示例

下面是一个综合示例,展示了如何声明数组、初始化数组、访问数组元素、遍历数组以及使用Arrays类的方法。

public class ArrayExample {  public static void main(String[] args) {  // 声明并初始化一维数组  int[] oneDimensionalArray = {1, 2, 3, 4, 5};  // 访问一维数组元素  System.out.println("一维数组的第一个元素: " + oneDimensionalArray[0]);  // 修改一维数组元素  oneDimensionalArray[0] = 10;  System.out.println("修改后的一维数组的第一个元素: " + oneDimensionalArray[0]);  // 遍历一维数组  System.out.println("一维数组的所有元素为:");  for (int i = 0; i < oneDimensionalArray.length; i++) {  System.out.print(oneDimensionalArray[i] + " ");  }  // 声明并初始化二维数组  int[][] twoDimensionalArray = {  {1, 2, 3},  {4, 5, 6},  {7, 8, 9}  };  // 访问二维数组元素  System.out.println("二维数组的第一个元素: " + twoDimensionalArray[0][0]);  // 修改二维数组元素  twoDimensionalArray[0][0] = 10;  System.out.println("修改后的二维数组的第一个元素: " + twoDimensionalArray[0][0]);  // 遍历二维数组  System.out.println("二维数组的所有元素为:");  for (int i = 0; i < twoDimensionalArray.length; i++) {  for (int j = 0; j < twoDimensionalArray[i].length; j++) {  System.out.print(twoDimensionalArray[i][j] + " ");  }  System.out.println(); // 换行,以便更清晰地显示二维数组  }  // 使用Arrays类的方法对数组进行排序  int[] arrayToSort = {5, 3, 8, 1, 2};  Arrays.sort(arrayToSort);  System.out.println("排序后的数组: " + Arrays.toString(arrayToSort));  // 使用Arrays类的方法查找数组元素  int index = Arrays.binarySearch(arrayToSort, 3);  if (index >= 0) {  System.out.println("元素3在数组中的索引为: " + index);  } else {  System.out.println("元素3在数组中未找到,插入点为: " + (-index - 1));  }  // 使用Arrays类的方法复制数组  int[] copiedArray = Arrays.copyOf(arrayToSort, arrayToSort.length);  System.out.println("复制后的数组: " + Arrays.toString(copiedArray));  // 使用Arrays类的方法填充数组  int[] filledArray = new int[5];  Arrays.fill(filledArray, 666);  System.out.println("填充后的数组: " + Arrays.toString(filledArray));  // 使用Arrays类的方法将数组转换为字符串  String arrayAsString = Arrays.toString(arrayToSort);  System.out.println("数组转换为字符串: " + arrayAsString);  }  
}

解释:
一维数组:
声明并初始化了一个包含5个整数的一维数组。
访问并修改了一维数组的第一个元素。
使用for循环遍历了一维数组的所有元素,并打印出来。
二维数组:
声明并初始化了一个3x3的二维数组。
访问并修改了二维数组的第一个元素。
使用嵌套的for循环遍历了二维数组的所有元素,并打印出来。
Arrays类的方法:
使用Arrays.sort()方法对一维数组进行了排序,并打印了排序后的数组。
使用Arrays.binarySearch()方法在一维数组中查找了元素3的索引,并打印了结果。
使用Arrays.copyOf()方法复制了一维数组,并打印了复制后的数组。
使用Arrays.fill()方法填充了一个一维数组,并打印了填充后的数组。
使用Arrays.toString()方法将一维数组转换为了字符串表示形式,并打印了结果。
通过以上代码和解释,您可以更全面地了解Java数组的声明、初始化、访问、修改、遍历以及Arrays类的方法的使用。

九、总结

数组是程序设计中的基本数据结构,用于存储相同类型的数据。Java中的数组具有类型相同、长度固定、下标索引和内存连续等特点。在使用数组时,可以访问和修改数组元素,获取数组长度,遍历数组,并将数组作为方法参数传递。此外,Java提供了Arrays类,包含排序、查找、复制、填充和转换为字符串等方法,方便对数组进行操作。本文还介绍了多维数组的概念和应用场景,并给出了一个综合示例,展示了如何声明、初始化、访问、遍历数组以及使用Arrays类的方法。通过本文的学习,可以更全面地了解Java数组的相关知识。

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

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

相关文章

源码编译方式安装htppd软件

一.源码编译安装httpd软件 1.安装阿帕奇的依赖&#xff0c;安装apr软件&#xff0c;阿帕奇正常运行的环境这个环境就是apr。 2.安装apr-util软件&#xff0c;主要提供针对apr环境的管理工具&#xff0c; 3.安装阿帕奇软件即httpd软件。 如上图所示&#xff0c;就是三个软件的…

E38.【C语言】练习:数据结构时间复杂度的计算

目录 1.二分法的时间复杂度 解: 2.求阶乘的时间复杂度 解: 3.递归实现斐波那契数,求时间复杂度 解: 4.时间复杂度的排名 备注:有关时间复杂度的讲解参见80.【C语言】数据结构之时间复杂度 1.二分法的时间复杂度 (代码来自E7.【C语言】练习&#xff1a;在一个有序数组中…

CentOS 7 yum失效的解决办法

文章目录 一、CentOS 7停止维护导致yum失效的解决办法解决方案 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、CentOS 7停止维护导致yum失效的解决办法 020 年&#xff0c;CentOS 项目与红帽联合宣布将全部投资转向 CentOS Stream&#xff0c;这是…

SpringBoot项目热部署-devtools

DevTools 会使用两个类加载器&#xff08;一个用于加载不变的类&#xff0c;一个用于加载可能会变化的类&#xff09;&#xff0c;每次重启只重新加载管理变化的类的加载器&#xff0c;因此会快很多 1.导入依赖 <dependency> <groupId>org.springframework.boot&l…

HCIE-Datacom题库_01_防火墙【18道题】

一、单选题 1.相比较于路由器、交接机&#xff0c;防火墙转发独有的模块为? 交换网板 MPU LPU SPU 解析&#xff1a; SFU&#xff08;Switch Fabric Unit&#xff09;&#xff1a;交换网板&#xff0c;负责整个系统的数据平面数据平面提供高速无阻塞数据通道&#xff0…

关于SOCKS协议的常见误区有哪些?

代理协议在设备与代理服务器之间的数据交换中起到了关键作用。在这方面&#xff0c;SOCKS代理协议是常见的选择之一&#xff0c;被广泛应用于下载、传输和上传网络数据的场景。然而&#xff0c;关于SOCKS代理协议存在一些常见的误解&#xff0c;让我们来逐一了解。 一、使用SO…

爬虫逆向-js进阶(续写,搭建网站)

1.搭建简单网站1 from flask import Flask,render_template import requests import json app Flask(name)# **location**的温度是**temp**度&#xff0c;天气状况&#xff1a;**desc**app.route(/) # 绑定处理函数 def index_url():location 101010100data get_weather(lo…

【学习】word保存图片

word中有想保存的照片 直接右键另存为的话&#xff0c;文件总是不清晰&#xff0c;截屏的话&#xff0c;好像也欠妥。 怎么办? 可以另存为 网页 .html 可以得到&#xff1a; 原图就放到了文件夹里面

C++简易日志系统:打造高效、线程安全的日志记录工具

目录 引言&#xff1a; 1.日志的基本概念 1.1.什么是日志&#xff1f; 1.2.我们为什么需要日志&#xff1f; 2.自己实现一个简易日志 2.1.日志的等级 2.2日志的格式 2.3.获取时间的方法 2.4.日志的主体实现 参数&#xff1a; 代码解析&#xff1a; 问题&#xff1a…

5、JavaScript(五)

28.jquery&#xff1a;js库 简化版本的js&#xff0c;封装了现成功能的js代码。 jquery就是一些封装好了的现成的方法&#xff0c;供我们直接使用。 jquery能实现的js都能实现。 在使用 记得先引入jquery&#xff1a;在菜鸟教程上直接用jquery的绝对路径引入&#xff0c;jq…

Gin框架操作指南03:HTML渲染

官方文档地址&#xff08;中文&#xff09;&#xff1a;https://gin-gonic.com/zh-cn/docs/ 注&#xff1a;本教程采用工作区机制&#xff0c;所以一个项目下载了Gin框架&#xff0c;其余项目就无需重复下载&#xff0c;想了解的读者可阅读第一节&#xff1a;Gin操作指南&#…

java游戏网站源码

题目&#xff1a;java游戏网站源码 编号B22A390 主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Mysql|大数据|SSM|SpringBoot|Vue|Jsp|MYSQL等)、学习资料、JAVA源码、技术咨询 文末联系获取 感兴趣可以先收藏起来&#xff0c;以防走丢&#xff0c;有任何选题、文档编…

什么是 BloomFilter

什么是 BloomFilter 布隆过滤器&#xff08;英语&#xff1a;Bloom Filter&#xff09;是 1970 年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。主要用于判断一个元素是否在一个集合中。 通常我们会遇到很多要判断一个元素是否在某个集合中的业务场景&a…

Cocos Creator导出obj文件用于后端寻路

Cocos Creator 3.8.0 用这个扩展插件 【杨宗宝】两年前写的网格工具&#xff0c;今天将它开源了。 - Creator 3.x - Cocos中文社区carlosyzy_extensions_mesh: Cocos Creator 3.x mesh插件&#xff0c;负责网格数据的导出。合并&#xff0c;拆封等一系列操作 (gitee.com) 下…

分类任务中评估模型性能的核心指标

在机器学习尤其是分类任务中&#xff0c;Accuracy&#xff08;准确率&#xff09;、Precision&#xff08;精确率&#xff09;、Recall&#xff08;召回率&#xff09;和F1 Score&#xff08;F1分数&#xff09;是评估模型性能的四个核心指标。每个指标都有其独特的含义和用途&…

排序基础方法

逆序&#xff08;inversion&#xff09; 一个序列中存在元素对&#xff0c;顺序与理想顺序相反 注意事项 算法的空间复杂度&#xff0c;即便graph本身要花费VE&#xff0c;但是DFS是V&#xff0c;只考虑自身要用的。 Selection Sort&#xff08;选择排序) 方法 不断选择最…

牛客编程初学者入门训练——BC53 判断是元音还是辅音

BC53 判断是元音还是辅音 描述 KiKi开始学习英文字母&#xff0c;BoBo老师告诉他&#xff0c;有五个字母A(a), E(e), I(i), O(o),U(u)称为元音&#xff0c;其他所有字母称为辅音&#xff0c;请帮他编写程序判断输入的字母是元音&#xff08;Vowel&#xff09;还是辅音&#x…

如何在算家云搭建Video-Infinity(视频生成)

一、模型介绍 Video-Infinity是一个先进的视频生成模型&#xff0c;使用多个 GPU 快速生成长视频&#xff0c;无需额外训练。它能够基于用户提供的文本或图片提示&#xff0c;创造出高质量、多样化的视频内容。 二、模型搭建流程 1.大模型 Video-Infinity 一键使用 基础环境…

Axure使用echarts详细教程

本次使用的axure版本为rp9,下面是效果图。 接下来是详细步骤 【步骤1】在axure上拖一个矩形进来&#xff0c;命名为myChart(这个根据实际情况来,和后面的代码对应就好) 【步骤2】 点击交互->选择加载时->选择打开链接->链接外部地址 点击fx这个符号 【步骤3】在弹…

【GIT】.cr、.gitattributes 、 .gitignore和.git各文件夹讲解介绍

在 Git 项目中&#xff0c;.cr、.gitattributes 和 .gitignore 文件分别用于不同的配置和管理功能。下面分别解释这些文件的作用和用途&#xff1a; 1. .gitignore 文件 作用&#xff1a; .gitignore 文件用于指定哪些文件或目录应该被 Git 忽略&#xff0c;不会被追踪或提交…