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面试高效通关秘籍:专业解读与青柚面试智能助攻
在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...
【kafka】Golang实现分布式Masscan任务调度系统
要求: 输出两个程序,一个命令行程序(命令行参数用flag)和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽,然后将消息推送到kafka里面。 服务端程序: 从kafka消费者接收…...
linux arm系统烧录
1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 (忘了有没有这步了 估计有) 刷机程序 和 镜像 就不提供了。要刷的时…...
selenium学习实战【Python爬虫】
selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...
MySQL用户和授权
开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务: test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...
如何理解 IP 数据报中的 TTL?
目录 前言理解 前言 面试灵魂一问:说说对 IP 数据报中 TTL 的理解?我们都知道,IP 数据报由首部和数据两部分组成,首部又分为两部分:固定部分和可变部分,共占 20 字节,而即将讨论的 TTL 就位于首…...
3-11单元格区域边界定位(End属性)学习笔记
返回一个Range 对象,只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意:它移动的位置必须是相连的有内容的单元格…...
省略号和可变参数模板
本文主要介绍如何展开可变参数的参数包 1.C语言的va_list展开可变参数 #include <iostream> #include <cstdarg>void printNumbers(int count, ...) {// 声明va_list类型的变量va_list args;// 使用va_start将可变参数写入变量argsva_start(args, count);for (in…...
C++实现分布式网络通信框架RPC(2)——rpc发布端
有了上篇文章的项目的基本知识的了解,现在我们就开始构建项目。 目录 一、构建工程目录 二、本地服务发布成RPC服务 2.1理解RPC发布 2.2实现 三、Mprpc框架的基础类设计 3.1框架的初始化类 MprpcApplication 代码实现 3.2读取配置文件类 MprpcConfig 代码实现…...
Java中HashMap底层原理深度解析:从数据结构到红黑树优化
一、HashMap概述与核心特性 HashMap作为Java集合框架中最常用的数据结构之一,是基于哈希表的Map接口非同步实现。它允许使用null键和null值(但只能有一个null键),并且不保证映射顺序的恒久不变。与Hashtable相比,Hash…...
