[Java 基础]数组
什么是数组?想象一下,你需要存储 5 个学生的考试成绩。你可以声明 5 个不同的 int 变量,但这会显得很笨拙。数组提供了一种更简洁、更有组织的方式来存储和管理这些数据。
数组可以看作是相同类型元素的集合,这些元素在内存中是连续存储的,并且可以通过一个共同的名称(数组名)和一个索引(下标)来访问。
数组的特点
- 相同类型: 数组中的所有元素必须是相同的数据类型(例如,都是 int、String 或自定义的对象类型)
- 固定长度: 数组在创建时必须指定其长度,并且一旦创建,其长度通常是不可改变的
- 连续存储: 数组中的元素在内存中是依次连续存储的,这使得可以通过索引快速访问任何位置的元素
- 索引访问: 数组中的每个元素都有一个唯一的索引(下标),用于标识其在数组中的位置。索引从 0 开始,到 数组长度 - 1 结束
声明数组只是告诉编译器我们将要创建一个存储特定类型元素的数组,并为其指定一个名称。声明数组的方法:
int[] scores; // 声明一个存储整数的数组,名为 scores
String[] names; // 声明一个存储字符串的数组,名为 names
double[] prices; // 声明一个存储双精度浮点数的数组,名为 prices
创建数组是指在内存中为数组分配实际的空间,并指定数组的长度(可以存储多少个元素)。我们使用 new 关键字来创建数组:
数组名 = new 类型[数组长度];
int[] scores = new int[5]; // 创建一个可以存储 5 个整数的数组
String[] names = new String[10]; // 创建一个可以存储 10 个字符串的数组
double[] prices = new double[100]; // 创建一个可以存储 100 个双精度浮点数的数组
在创建数组时,如果没有显式地给数组元素赋值,它们会被赋予默认值。 我们也可以在创建数组的同时直接初始化数组元素:
int[] numbers = {10, 20, 30, 40, 50}; // 创建一个包含 5 个整数的数组并赋值
String[] days = {"Monday", "Tuesday", "Wednesday"}; // 创建一个包含 3 个字符串的数组并赋值
:::color3
使用这种方式初始化时,不需要指定数组的长度,编译器会根据提供的元素个数自动确定数组的长度。
:::
当然,你也可以通过先创建再赋值的方式初始化数组:
int[] grades = new int[3]; // 创建一个长度为 3 的整数数组
grades[0] = 85; // 给第一个元素(索引为 0)赋值
grades[1] = 92; // 给第二个元素(索引为 1)赋值
grades[2] = 78; // 给第三个元素(索引为 2)赋值
创建完数组并向其中放入数据后,如果要访问数组中的特定元素,我们需要使用数组名和元素的索引(下标)。索引从 0 开始。
int[] ages = {25, 30, 22};int firstAge = ages[0]; // firstAge 的值为 25
int secondAge = ages[1]; // secondAge 的值为 30
int thirdAge = ages[2]; // thirdAge 的值为 22System.out.println("第一个年龄是:" + firstAge);
System.out.println("第二个年龄是:" + secondAge);
System.out.println("第三个年龄是:" + thirdAge);
可以使用数组的 length
属性来获取数组的长度(包含的元素个数)。length
是数组的一个只读属性,不能被修改。
int[] data = {1, 2, 3, 4, 5};
int arrayLength = data.length; // arrayLength 的值为 5
System.out.println("数组的长度是:" + arrayLength);
遍历数组是指访问数组中的每一个元素。常用的遍历方式有以下几种,最常用的就是直接使用 for 循环遍历:
int[] scores = {90, 85, 95, 88, 92};
for (int i = 0; i < scores.length; i++) {System.out.println("第 " + (i + 1) + " 个分数是:" + scores[i]);
}
相比于直接使用 for 循环遍历,更方便的一种方法是使用增强 for 循环遍历数组:
String[] colors = {"Red", "Green", "Blue"};
for (String color : colors) {System.out.println("颜色:" + color);
}
上面的这些例子都是一维的数组,Java 也支持多维数组,最常见的是二维数组。可以将二维数组看作是数组的数组,或者是一个表格。
int[][] matrix = new int[3][4]; // 创建一个 3 行 4 列的整数二维数组
int[][] numbers2D = {{1, 2, 3},{4, 5, 6},{7, 8, 9}
};
int element = numbers2D[1][2]; // 访问第二行(索引为 1)第三列(索引为 2)的元素,值为 6
System.out.println("访问的元素是:" + element);for (int i = 0; i < numbers2D.length; i++) { // 遍历行for (int j = 0; j < numbers2D[i].length; j++) { // 遍历列System.out.print(numbers2D[i][j] + " ");}System.out.println(); // 换行
}
虽然数组非常有用,但它也有一些局限性,第一就是它是固定长度的,一旦创建,长度就不能动态改变,如果需要存储的元素数量不确定,或者需要频繁地添加或删除元素,那么使用集合框架(例如 ArrayList)可能更合适;其二就是数组只能存储相同类型的元素。
相关文章:

[Java 基础]数组
什么是数组?想象一下,你需要存储 5 个学生的考试成绩。你可以声明 5 个不同的 int 变量,但这会显得很笨拙。数组提供了一种更简洁、更有组织的方式来存储和管理这些数据。 数组可以看作是相同类型元素的集合,这些元素在内存中是连…...
fastadmin fildList 动态下拉框默认选中
html页面 <td><select class"form-control dtselect" data-rule"required" data-dtselected"<%row.type%>" name"<%name%>[<%index%>][type]">{foreach nametypeList idvo}<option value"{$vo…...
java学习笔记——数组和二维数组
一、一维数组 1. 定义数组 语法: // 动态初始化(指定长度) 数据类型[] 数组名 = new 数据类型[长度]; // 示例: int[] arr1 = new int[5]; // 默认值:0// 静态初始化(直接赋值) 数据类型[] 数组名 = {元素1, 元素2, ...}; // 示例: String[]…...

‘pnpm‘ 不是内部或外部命令,也不是可运行的程序
npm install -g pnpm changed 1 package in 4s 1 package is looking for funding run npm fund for details C:\Users\gang>pnpm pnpm 不是内部或外部命令,也不是可运行的程序 或批处理文件。 原来是安装的全局路径被我改了 npm list -g --depth 0 把上述…...

Android Test2 获取系统android id
Android Test2 获取系统 android id 这篇文章针对一个常用的功能做一个测试。 在项目中,时常会遇到的一个需求就是:一台设备的唯一标识值。然后,在网络请求中将这个识别值传送到后端服务器,用作后端数据查询的条件。Android 设备…...

webpack打包学习
vue开发 现在项目里安装vue: npm install vue vue的文件后缀是.vue webpack不认识vue的话就接着安插件 npm install vue-loader -D 这是.vue文件: <template> <div><h2 class"title">{{title}}</h2><p cla…...

基于Java(Jsp+servelet+Javabean)+MySQL实现图书管理系统
图书管理系统 一、需求分析 1.1 功能描述 1.1.1“读者”功能 1)图书的查询:图书的查询可以通过搜索图书 id、书名、作者名、出版社来实现,显示结果中需要包括书籍信息以及是否被借阅的情况; 2)图书的借阅:借阅图书…...

服务器CPU被WMI Provider Host系统进程占用过高,导致系统偶尔卡顿的排查处理方案
问题现状 最近一个项目遇到一个非常奇葩的问题:正式服务器被一个WMI Provider Host的系统进程占用大量的CPU资源,导致我们的系统偶尔卡顿 任务管理器-详细信息中CPU时间,这个进程也是占用最多的 接口时不时慢很多 但单独访问我们的接口又正…...

JavaSwing之--JMenuBar
Java Swing之–JMenuBar(菜单栏) JMenuBar是 Java Swing 库中的一个组件,用于创建菜单栏,通常位于窗口的顶部。它是菜单系统的容器,用于组织和显示应用程序的菜单结构 菜单栏由菜单构成,菜单由菜单项或子菜单构成,也…...
vue3+elementplus表格表头加图标及文字提示
表头加自定义内容有很多种方法,包括使用el-icon,插槽,CSS 伪元素添加图标还有font-awesome等等。 一、方法一:使用render-header属性 <el-table :data"tableData"><el-table-column prop"name" la…...

【物联网-S7Comm协议】
物联网-S7Comm协议 ■ 调试工具■ S7协议-简介■ S7协议和modbusTCP协议区别■ OSI 层 S7 协议■ S7协议数据结构 (TPKTCOTPS7Comm)■ TPKT(第五层:会话层) 总共占4个字节■ COTP(第六层:表示层…...
NLP中的input_ids是什么?
在自然语言处理(NLP)中,input_ids 是什么 在自然语言处理(NLP)中,input_ids 是将文本转换为模型可处理的数字表示后的结果,是模型输入的核心参数之一。 一、基本概念 文本数字化 原始文本(如 “Hello world!”)无法直接被模型处理,需要通过分词器(Tokenizer) 将其…...
LeetCode Hot100刷题——划分字母区间
763.划分字母区间 给你一个字符串 s 。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。例如,字符串 "ababcc" 能够被分为 ["abab", "cc"],但类似 ["aba", "bcc"…...
c++ 基于OpenSSL的EVP接口进行SHA3-512和SM3哈希计算
通过OpenSSL的EVP接口进行 SHA3-512 和 SM3 哈希计算 #include <iostream> #include <openssl/evp.h> #include <cstring>using namespace std;void PrintHex(const std::string &hexStr) {for (unsigned char c : hexStr){printf("%02x", c)…...
Vue3实现拖拽改变元素大小
代码实现 整体页面结构通过一个 dragResize-wrapper 包含左右两个区域,左侧区域包含一个可拖拽的边界。以下是关键代码 HTML 部分 <template><div class"dragResize-wrapper"><div class"dragResize-left"><div class&…...
Spring IoC 详解:原理、实现与实战
Spring IoC 详解:原理、实现与实战 前言 Spring IoC(Inversion of Control,控制反转)是Spring框架的核心基础。它通过解耦对象的创建与依赖关系管理,极大提升了系统的可维护性和扩展性。本文将系统梳理Spring IoC的原…...
深入Java NIO:构建高性能网络应用
引言 在上一篇文章中,我们介绍了Java网络编程的基础模型:阻塞式I/O和线程池模型。这些模型在处理高并发场景时存在明显的局限性。本文将深入探讨Java NIO(New I/O)技术,这是一种能够显著提升网络应用性能的非阻塞I/O模…...

数据分析后台设计指南:实战案例解析与5大设计要点总结
引言 数据于企业而言异常重要,企业通过数据可以优化战略决策,因此企业对数据的采集正趋向智能化、数字化,数据分析后台就是企业智能化、数字化记录、分析数据的渠道。本文分享一个数据分析后台原型实战案例,通过页面拆解总结原型…...
深度学习之模型压缩三驾马车:基于ResNet18的模型剪枝实战(1)
一、背景:为什么需要模型剪枝? 随着深度学习的发展,模型参数量和计算量呈指数级增长。以ResNet18为例,其在ImageNet上的参数量约为1100万,虽然在服务器端运行流畅,但在移动端或嵌入式设备上部署时…...
SSH/RDP无法远程连接?腾讯云CVM及通用服务器连接失败原因与超全排查指南
更多服务器知识,尽在hostol.com 嘿,各位服务器的“船长”和“管理员”们!咱们在浩瀚的数字海洋中驾驭着自己的服务器“战舰”,最怕遇到什么情况?除了数据丢失,恐怕就是突然发现自己被锁在“驾驶舱”门外—…...

网络测试实战:金融数据传输的生死时速
阅读原文 7.4 网络测试实战--数据传输:当毫秒决定百万盈亏 你的交易指令为何总是慢人一步? 在2020年"原油宝"事件中,中行原油宝产品因为数据传输延迟导致客户未能及时平仓,最终亏损超过90亿元。这个血淋淋的案例揭示了…...

数据库系统概论(十四)详细讲解SQL中空值的处理
数据库系统概论(十四)详细讲解SQL中空值的处理 前言一、什么是空值?二、空值是怎么产生的?1. 插入数据时主动留空2. 更新数据时设置为空3. 外连接查询时自然出现 三、如何判断空值?例子:查“漏填数据的学生…...

【信创-k8s】海光/兆芯+银河麒麟V10离线部署k8s1.31.8+kubesphere4.1.3
❝ KubeSphere V4已经开源半年多,而且v4.1.3也已经出来了,修复了众多bug。介于V4优秀的LuBan架构,核心组件非常少,资源占用也显著降低,同时带来众多功能和便利性。我们决定与时俱进,使用1.30版本的Kubernet…...
[蓝桥杯]三体攻击
三体攻击 题目描述 三体人将对地球发起攻击。为了抵御攻击,地球人派出 A B CA B C 艘战舰,在太空中排成一个 AA 层 BB 行 CC 列的立方体。其中,第 ii 层第 jj 行第 kk 列的战舰(记为战舰 (i, j, k)(i, j, k)&am…...
深入解析支撑向量机(SVM):原理、推导与实现
在机器学习领域,支撑向量机(Support Vector Machine,简称SVM)是一种广泛使用的分类算法,以其强大的分类性能和优雅的数学原理而备受关注。本文将从问题定义、数学推导到实际应用,深入解析SVM的核心原理和实…...

一台电脑联网如何共享另一台电脑?网线方式
前言 公司内网一个人只能申请一个账号和一个主机设备;会检测MAC地址;如果有两台设备,另一台就没有网;因为是联想老电脑,共享热点用不了,但是有一根网线,现在解决网线方式共享网络; …...
面试题:SQL 中如何将 多行合并为一行(合并行数据为列)?
✅ 面试题:SQL 中如何将 多行合并为一行(合并行数据为列)? 这是面试和实战中非常常见的场景,属于“行列转换”问题之一,常用于报表聚合、分类汇总、透视表生成等。 go专栏:https://duoke360.co…...

MacroDroid安卓版:自动化操作,让生活更智能
在智能手机的日常使用中,我们常常会遇到一些重复性的任务,如定时开启或关闭Wi-Fi、自动回复消息、根据位置调整音量等。这些任务虽然简单,但频繁操作会让人感到繁琐。MacroDroid安卓版正是为了解决这些问题而设计的,它是一款功能强…...

力提示(force prompting)的新方法
每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…...

【Redis实战:缓存与消息队列的应用】
在现代互联网开发中,Redis 作为一款高性能的内存数据库,广泛应用于缓存和消息队列等场景。本文将深入探讨 Redis 在这两个领域的应用,并通过代码示例比较两个流行的框架(Redis 和 RabbitMQ)的特点与适用场景࿰…...