java:Java中的数组详解
目录
Java数组的定义和特点:
Java数组的初始化和赋值
Java数组的常用操作
1. 遍历数组
2. 获取数组长度
3. 访问数组元素
4. 数组的拷贝
多维数组
数组的排序和查找
冒泡排序:
快速排序 :
二分查找:
数组的应用:
Java数组的注意事项:
Java数组的定义和特点:
Java数组是一种数据结构,用于存储相同数据类型的元素集合。数组在内存中是连续存储的,每个元素都有一个唯一的索引(下标)来访问。数组的大小在创建时就确定了,不可动态改变。
// 定义一个整型数组 int[] numbers = new int[5];// 初始化数组元素 numbers[0] = 10; numbers[1] = 20; numbers[2] = 30; numbers[3] = 40; numbers[4] = 50;// 访问数组元素 System.out.println("第一个元素:" + numbers[0]); System.out.println("第三个元素:" + numbers[2]);
数组是一种效率高的数据结构,可以快速访问和操作元素。由于数组中的元素类型相同,因此可以更方便地进行批量操作和处理。
// 遍历数组并求和 int sum = 0; for (int i = 0; i < numbers.length; i++) {sum += numbers[i]; } System.out.println("数组元素之和:" + sum);
Java数组可以是基本数据类型的数组(如int、double、char等),也可以是对象类型的数组(如String、自定义类等)。数组的元素可以通过下标来访问和修改,下标从0开始计数。
// 定义一个字符串数组 String[] names = {"Alice", "Bob", "Cathy"};// 访问数组元素 System.out.println("第二个元素:" + names[1]);// 修改数组元素 names[2] = "David"; System.out.println("修改后的第三个元素:" + names[2]);
Java数组的初始化和赋值
在Java中,数组的初始化和赋值是非常重要的操作。下面通过代码演示来展示如何进行数组的初始化和赋值:
// 初始化数组并赋值 int[] numbers = {10, 20, 30, 40, 50}; // 直接初始化数组并赋值// 打印数组元素 System.out.print("数组元素:"); for (int i = 0; i < numbers.length; i++) {System.out.print(numbers[i] + " "); } System.out.println();// 动态初始化数组 int[] dynamicArray = new int[3]; // 动态初始化一个长度为3的整型数组// 通过循环给动态数组赋值 for (int i = 0; i < dynamicArray.length; i++) {dynamicArray[i] = i * 5; }// 打印动态数组元素 System.out.print("动态数组元素:"); for (int i = 0; i < dynamicArray.length; i++) {System.out.print(dynamicArray[i] + " "); } System.out.println();
在上面的代码中,我们展示了两种常见的数组初始化和赋值方法。第一种是直接初始化数组并赋值,第二种是动态初始化数组并通过循环逐个赋值。这些方法可以帮助我们灵活地创建并初始化数组,以满足不同的需求。
Java数组的常用操作
Java数组作为一种重要的数据结构,在实际开发中经常需要进行各种操作。下面将介绍一些Java数组的常用操作,帮助读者更好地理解和运用数组。
1. 遍历数组
遍历数组是对数组中的每个元素进行访问的常见操作。可以使用for循环或增强型for循环来遍历数组,示例如下:
int[] numbers = {10, 20, 30, 40, 50};// 使用for循环遍历数组 for (int i = 0; i < numbers.length; i++) {System.out.print(numbers[i] + " "); }// 使用增强型for循环遍历数组 for (int num : numbers) {System.out.print(num + " "); }
2. 获取数组长度
数组的长度可以通过数组的
length
属性来获取,示例如下:int[] numbers = {10, 20, 30, 40, 50}; int length = numbers.length; System.out.println("数组长度为:" + length);
3. 访问数组元素
可以通过下标来访问数组中的元素,下标从0开始,示例如下:
int[] numbers = {10, 20, 30, 40, 50}; int element = numbers[2]; // 访问索引为2的元素,即第三个元素 System.out.println("第三个元素为:" + element);
4. 数组的拷贝
Java提供了
System.arraycopy()
方法和Arrays.copyOf()
方法来实现数组的拷贝操作,示例如下:int[] sourceArray = {1, 2, 3, 4, 5}; int[] targetArray = new int[sourceArray.length]; System.arraycopy(sourceArray, 0, targetArray, 0, sourceArray.length); // 或者使用Arrays.copyOf()方法 int[] copiedArray = Arrays.copyOf(sourceArray, sourceArray.length);
多维数组
Java支持多维数组,包括二维数组、三维数组等。多维数组是数组的数组,可以理解为在数组中嵌套数组,通过多维数组可以更灵活地存储和操作数据。
// 二维数组示例 int[][] matrix = {{1, 2, 3}, {4, 5, 6}};// 三维数组示例 int[][][] cube = {{{1, 2}, {3, 4}}, {{5, 6}, {7, 8}}};
数组的排序和查找
对数组进行排序和查找是常见的操作,常用的算法包括冒泡排序、快速排序和二分查找。冒泡排序通过相邻元素比较交换实现排序,快速排序采用分治思想,二分查找适用于有序数组。
冒泡排序:
public void bubbleSort(int[] arr) {int n = arr.length;for (int i = 0; i < n - 1; i++) {for (int j = 0; j < n - i - 1; j++) {if (arr[j] > arr[j + 1]) {// 交换元素int temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;}}} }
快速排序 :
public void quickSort(int[] arr, int low, int high) {if (low < high) {int pivot = partition(arr, low, high);quickSort(arr, low, pivot - 1);quickSort(arr, pivot + 1, high);} }private int partition(int[] arr, int low, int high) {int pivot = arr[high];int i = low - 1;for (int j = low; j < high; j++) {if (arr[j] < pivot) {i++;// 交换元素int temp = arr[i];arr[i] = arr[j];arr[j] = temp;}}// 将pivot放到正确的位置int temp = arr[i + 1];arr[i + 1] = arr[high];arr[high] = temp;return i + 1; }
二分查找:
public int binarySearch(int[] arr, int target) {int low = 0;int high = arr.length - 1;while (low <= high) {int mid = low + (high - low) / 2;if (arr[mid] == target) {return mid;} else if (arr[mid] < target) {low = mid + 1;} else {high = mid - 1;}}return -1; // 未找到目标元素 }
数组的应用:
当涉及到数组的应用时,可以考虑以下几个具体场景:
- 学生成绩管理系统:可以使用数组来存储学生的成绩信息,方便查找、排序和统计数据。
// 学生成绩管理系统示例 public class GradeManagementSystem {private int[] grades;public GradeManagementSystem(int[] grades) {this.grades = grades;}public void displayGrades() {for (int grade : grades) {System.out.println("Grade: " + grade);}}public int getAverageGrade() {int sum = 0;for (int grade : grades) {sum += grade;}return sum / grades.length;}public void sortGrades() {Arrays.sort(grades);}public int findGrade(int grade) {for (int i = 0; i < grades.length; i++) {if (grades[i] == grade) {return i;}}return -1;} }
- 数据统计系统:可以使用数组来存储数据,进行统计分析,如计算平均值、最大值、最小值等。
// 数据统计系统示例 public class DataStatisticsSystem {private double[] data;public DataStatisticsSystem(double[] data) {this.data = data;}public double getAverage() {double sum = 0;for (double d : data) {sum += d;}return sum / data.length;}public double getMaxValue() {double max = data[0];for (double d : data) {if (d > max) {max = d;}}return max;}public double getMinValue() {double min = data[0];for (double d : data) {if (d < min) {min = d;}}return min;} }
- 图书管理系统:可以使用二维数组来存储图书信息,包括书名、作者、出版日期等,方便管理和检索图书信息。
// 图书管理系统示例 public class LibraryManagementSystem {private String[][] books;public LibraryManagementSystem(String[][] books) {this.books = books;}public void displayBooks() {for (String[] book : books) {System.out.println("Book: " + book[0] + " by " + book[1] + " published on " + book[2]);}}public String[] findBookByAuthor(String author) {List<String> foundBooks = new ArrayList<>();for (String[] book : books) {if (book[1].equals(author)) {foundBooks.add(book[0]);}}return foundBooks.toArray(new String[0]);} }
Java数组的注意事项:
在使用Java数组时,有一些注意事项需要注意,以确保程序的正确性和性能:
数组的下标从0开始:在Java中,数组的下标是从0开始的,因此访问数组元素时要注意不要越界。
数组长度不可变:一旦数组被创建后,其长度是不可变的。如果需要动态调整数组的长度,可以考虑使用集合类(如ArrayList)。
初始化数组:在使用数组之前,需要先对数组进行初始化。可以通过循环、赋值或者使用Arrays.fill()方法进行初始化。
遍历数组:遍历数组时,可以使用for循环、增强for循环或者Arrays.stream()方法。选择合适的遍历方式可以提高代码的可读性和性能。
数组越界检查:在访问数组元素时,务必进行越界检查,避免出现ArrayIndexOutOfBoundsException异常。
数组排序:如果需要对数组进行排序,可以使用Arrays.sort()方法进行排序。对于自定义类型的数组,需要实现Comparable接口或者传入Comparator参数进行排序。
多维数组:Java支持多维数组,可以通过数组的数组来实现多维数据结构。在使用多维数组时,要注意下标的对应关系。
数组拷贝:在需要复制数组内容时,可以使用Arrays.copyOf()方法或者System.arraycopy()方法进行数组拷贝。
内存占用:数组在内存中是连续存储的,因此在定义数组时要考虑数组元素的类型和数量,避免占用过多的内存。
数组与集合的选择:在选择数据结构时,要根据具体需求和操作的复杂度来选择数组或者集合。数组适合于元素固定、随机访问的场景,而集合适合于元素动态、增删操作频繁的场景。
相关文章:
java:Java中的数组详解
目录 Java数组的定义和特点: Java数组的初始化和赋值 Java数组的常用操作 1. 遍历数组 2. 获取数组长度 3. 访问数组元素 4. 数组的拷贝 多维数组 数组的排序和查找 冒泡排序: 快速排序 : 二分查找: 数组的应用: Java数…...

Modern C++ std::visit从实践到原理
前言 std::visit 是 C17 中引入的一个模板函数,它用于对给定的 variant、union 类型或任何其他兼容的类型执行一个访问者操作。这个函数为多种可能类型的值提供了一种统一的访问机制。使用 std::visit,你可以编写更通用和灵活的代码,而无需关…...

谷歌gemma2b windows本地cpu gpu部署,pytorch框架,模型文件百度网盘下载
简介 谷歌DeepMind发布了Gemma,这是一系列灵感来自用于Gemini相同研究和技术的开放模型。开放模型适用于各种用例,这是谷歌非常明智的举措。有2B(在2T tokens上训练)和7B(在6T tokens上训练)模型,包括基础和指令调整版本。在8192个token的上下文长度上进行训练。允许商业使…...

数据结构-查找与排序
数据结构再往后就是比较零散的各种操作,查找与排序是其中最常出现的,今天来总结一下常用的查找与排序所用的方法 查找 顺序查找 最简单的查找方式,遍历,然后比较 bool search1(int *a,int n,int k){for (int i1;i<n;i){//遍…...

【前端素材】推荐优质后台管理系统Qovex平台模板(附源码)
一、需求分析 1、定义 后台管理系统是一种用于管理和监控网站、应用程序或系统的在线工具。它通常是通过网页界面进行访问和操作,用于管理网站内容、用户权限、数据分析等。后台管理系统是网站或应用程序的控制中心,管理员可以通过后台系统进行各种管理…...

MATLAB环境下基于短时傅里叶变换和Rényi熵的脑电信号和语音信号分析
傅里叶变换是不能很好的反映信号在时域的某一个局部范围的频谱特点的,这一点很可惜。因为在许多实际工程中,人们对信号在局部区域的特征是比较关心的,这些特征包含着十分有用的信息。这类信号因为在时域(或者是空间域)上具有突变的非稳定性和…...
Go语言调用身份证实名认证API方法-标准版身份证实名认证接口
翔云身份证实名认证接口具备高准确度的身份信息比对能力,包括姓名、身份证号码、人脸照片等信息的一致性验证,并能实时反馈验证结果。 以下是GO语言调用翔云身份实名认证API的代码: package mainimport ("fmt""bytes"&q…...

数据库增删改查
DDL: 数据定义语言,用来定义数据库对象(数据库、表、字段)DML: 数据操作语言,用来对数据库表中的数据进行增删改DQL: 数据查询语言,用来查询数据库中表的记录DCL: 数据控制语言,用来创建数据库用户、控制数…...

10.CSS3的calc函数
CSS3 的 calc 函数 经典真题 CSS 的计算属性知道吗? CSS3 中的 calc 函数 calc 是英文单词 calculate(计算)的缩写,是 CSS3 的一个新增的功能。 MDN 的解释为可以用在任何长度、数值、时间、角度、频率等处,语法如…...

echrts 全国地图、各省市地图json文件下载
DataV.GeoAtlas地理小工具系列...
如何使用1688.item_search_shop API获取阿里巴巴店铺商品信息
要使用1688的item_search_shop API获取阿里巴巴店铺的商品信息,你通常需要遵循以下步骤: 1. 注册并获取API密钥 首先,你需要在阿里巴巴开放平台(如1688开放平台)上注册一个开发者账号,并创建一个应用。创…...

PLC_博图系列☞基本指令“取反RLO”
PLC_博图系列☞基本指令“取反RLO” 文章目录 PLC_博图系列☞基本指令“取反RLO”背景介绍取反RLO说明示例 关键字: PLC、 西门子、 博图、 Siemens 、 取反RLO 背景介绍 这是一篇关于PLC编程的文章,特别是关于西门子的博图软件。我并不是专业的PLC…...
docker安装PostGIS扩展
去docker仓库查找你想要安装的镜像版本,并pull下来 我下载的版本: [rootlocalhost ~]# docker pull postgis/postgis:12-3.2运行容器 [rootlocalhost ~]# docker run --name postgis --privilegedtrue --restartalways -e POSTGRES_USER12345678 -e P…...

LabVIEW开发FPGA的高速并行视觉检测系统
LabVIEW开发FPGA的高速并行视觉检测系统 随着智能制造的发展,视觉检测在生产线中扮演着越来越重要的角色,尤其是在质量控制方面。传统的基于PLC的视觉检测系统受限于处理速度和准确性,难以满足当前生产需求的高速和高精度要求。为此…...
P5734 【深基6.例6】文字处理软件 - Java
题目描述 你需要开发一款文字处理软件。最开始时输入一个字符串作为初始文档。可以认为文档开头是第 00 个字符。需要支持以下操作: 1 str:后接插入,在文档后面插入字符串 strstr,并输出文档的字符串;2 a bÿ…...

关于设备连接有人云的使用及modbus rtu协议,服务器端TCP调试设置
有人云调试 调试过程问题1. 关于modbus rtu协议,实质上有三种modbus基本原理modbus 格式2. 关于modbus crc16通信校验3. 关于在ubuntu阿里云服务器端,监听网络数据之调试mNetAssist4. 使用有人FAE传给的设置软件问题???之前的一个项目,再拿出来回顾下。 调试过程 先 要在有…...

开源图表库Echarts 简介与基本使用
ECharts 是一个使用 JavaScript 实现的开源可视化图表库,由百度团队开发。它提供了丰富的图表类型,如折线图、柱状图、饼图、地图、雷达图等,并且可以轻松地与其他前端框架和库集成。ECharts 的设计目的是为了满足复杂数据的可视化需求&#…...
变更ip后怎么查现在的代理ip地址?代理IP在网络请求中有哪些优势?
要查看当前的代理IP地址,可以尝试以下方法 浏览器设置:在大部分浏览器中,可以通过菜单选项中的“设置”或“帮助”来查找关于代理服务器的设置。在这里,可以看到当前使用的代理服务器地址、端口号以及是否启用了代理服务。在线工具…...
C#浮点运算出错问题
在计算单价等活动的时候,我们经常会用到double 浮点进行运算,但是在乘除的时候经常出现精度丢失问题 decimal 关键字表示 128 位数据类型。 同浮点型相比,decimal 类型具有更高的精度和更小的范围,这使它适合于财务和货币计算 dou…...
WPF 控件禁用时,显示悬浮提示
WPF 控件禁用时,显示悬浮提示 控件在禁用状态下,按钮是没有悬浮提示信息的,是事件触发的机制; 如果要禁用下也有悬浮提示,可以在控件外面加一层,例如: <Border Grid.Column"1" To…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)
HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...

shell脚本--常见案例
1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件: 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...

.Net框架,除了EF还有很多很多......
文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...

SCAU期末笔记 - 数据分析与数据挖掘题库解析
这门怎么题库答案不全啊日 来简单学一下子来 一、选择题(可多选) 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘:专注于发现数据中…...

HTML 列表、表格、表单
1 列表标签 作用:布局内容排列整齐的区域 列表分类:无序列表、有序列表、定义列表。 例如: 1.1 无序列表 标签:ul 嵌套 li,ul是无序列表,li是列表条目。 注意事项: ul 标签里面只能包裹 li…...

剑指offer20_链表中环的入口节点
链表中环的入口节点 给定一个链表,若其中包含环,则输出环的入口节点。 若其中不包含环,则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...

零基础设计模式——行为型模式 - 责任链模式
第四部分:行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习!行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想:使多个对象都有机会处…...

技术栈RabbitMq的介绍和使用
目录 1. 什么是消息队列?2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...

STM32HAL库USART源代码解析及应用
STM32HAL库USART源代码解析 前言STM32CubeIDE配置串口USART和UART的选择使用模式参数设置GPIO配置DMA配置中断配置硬件流控制使能生成代码解析和使用方法串口初始化__UART_HandleTypeDef结构体浅析HAL库代码实际使用方法使用轮询方式发送使用轮询方式接收使用中断方式发送使用中…...