当前位置: 首页 > news >正文

【Java】手把手学会数组的使用

数组的基本用法

创建数组

基本语法:

// 动态初始化
数据类型 [] 数组名称 = new 数据类型 [] { 初始化数据 };
// 静态初始化
数据类型 [] 数组名称 = { 初始化数据 };

代码示例:

int[] array1 = {1,2,3,4,5};int[] array2 = new int[]{1,2,3,4,5};int[] array3 = new int[5];
array3 = new int[]{1,2,3,4,5};

 数组的使用

int[] array = {1,2,3,4,5};Systrm.out.println(array.length);    //打印数组的长度//获取数组中的元素array[1] = 6;  //将下标为1位置的数更换为6

 注意事项

1. 使用 arr.length 能够获取到数组的长度,   这个操作为成员访问操作符   后面在面向对象中会经常用到
2. 使用 [ ] 按下标取数组元素, 需要注意, 下标从 0 开始计数
3. 使用 [ ] 操作既能读取数据, 也能修改数据 .
4. 下标访问操作不能超出有效范围 [0, length - 1] , 如果超出有效范围 , 会出现下标越界异常

遍历数组

int[] arr = {1, 2, 3};for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}//输出结果为:1,2,3

 使用  for - each 循环来遍历数组,也叫做增强循环。

int[] array = {1,2,3,4,5,6};for(int x : array){
System.out.println(x);
}
for-each for 循环的另外一种使用方式, 能够更方便的完成对数组的遍历, 可以避免循环条件和更新语句写错,一般只用于遍历数组当中。

数组作为方法的参数进行传参

代码示例:

public static void printArray(int[] a) {
for (int x : a) {
System.out.println(x);
}
}public static void main(String[] args) {
int[] arr = {1, 2, 3};
printArray(arr);
}

该代码就是利用数组的传参来进行遍历数组

  • int[] a 是方法的形参, int[] arr 是方法实参
  • 如果需要获取到数组长度, 同样可以使用 a.length

理解引用类型

代码示例:

public static void main(String[] args) {
int num = 0;
func(num);
System.out.println("num = " + num);
}
public static void func(int x) {
x = 10;
System.out.println("x = " + x);
}

在 main 方法中调用方法 func() 的时候会创建一个 func() 的栈帧,变量 X 是在 func() 中创建的,在调用完之后就销毁了,所以并不影响 main() 方法里面的变量。

参数传参数组类型

代码示例:

public static void main(String[] args) {
int[] arr = {1, 2, 3};
func(arr);
System.out.println("arr[0] = " + arr[0]);
}
public static void func(int[] a) {
a[0] = 10;
System.out.println("a[0] = " + a[0]);
}

我们来简易画一下该代码的调用图:

我们可以看到在传参之后 arr 和 a 都指向了堆中的该数组。因此我们可以用 a 来改变数组里面的内容

初识 JVM 内存区域划分

JVM 的内存被划分成了几个区域 , 如图所示:
  • 程序计数器 (PC Register): 只是一个很小的空间, 保存下一条执行的指令的地址。
  • 虚拟机栈(JVM Stack): 重点是存储局部变量表(当然也有其他信息). 我们刚才创建的 int[] arr 这样的存储地址的引用就是在这里保存。
  • 本地方法栈(Native Method Stack): 本地方法栈与虚拟机栈的作用类似. 只不过保存的内容是Native方法的局 部变量. 在有些版本的 JVM 实现中(例如HotSpot), 本地方法栈和虚拟机栈是一起的。
  • (Heap): JVM所管理的最大内存区域. 使用 new 创建的对象都是在堆上保存 (例如前面的 new int[]{1, 2, 3} )。
  • 方法区(Method Area): 用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数 据. 方法编译出的的字节码就是保存在这个区域。
  • 运行时常量池(Runtime Constant Pool): 是方法区的一部分, 存放字面量(字符串常量)与符号引用. (注意 JDK 1.7 开始, 运行时常量池在堆上)。

数组作为方法的返回值

public static int[] func1(int[] array,int key){for (int i = 0; i < array.length-1; i++) {for (int j = 0; j < array.length; j++) {if(i != j && array[i] + array[j] == key){return new int[]{i,j};}}}return new int[]{-1,-1};}public static void main(String[] args) {int[] array = {2,7,11,15};int[] b = func1(array,9);System.out.println(Arrays.toString(b));}

该代码的含义是在 array 数组中找到两个相加等于 9 的数的下标,并作为方法的返回值一次性将两个下标通过数组来返回出来。

java.util.Arrays  包

我们来讲解一下关于 java.util.Arrays 这个包中的一些方法的使用。

数组转字符串

代码示例:

    public static void main(String[] args) {int[] array = {1,2,3,4,5,6};String str = Arrays.toString(array);System.out.println(str);}

我们通过 Arrays.toString() 该方法将一个数组转换成一个字符串了,最后将该字符串输出。

数组拷贝

代码示例:

    public static void main(String[] args) {int[] array1 = {1,2,3,4,5,6};int[] array2 = new int[array1.length];array2 = Arrays.copyOf(array1,array1.length);System.out.println(Arrays.toString(array2));}

我们利用 Arrays.copyOf() 方法将数组 array1 里面的内容拷贝到了 array2 里面。

范围拷贝:

代码示例:

    public static void main(String[] args) {int[] array1 = {1,2,3,4,5};int[] array2 = new int[array1.length];array2 = Arrays.copyOfRange(array1,1,3);System.out.println(Arrays.toString(array2));}

我们利用 copyOfRange() 方法将数组 array1 的一部分拷贝到数组 array2 中。

查找数组中指定元素(二分查找)

代码示例:

    public static void main(String[] args) {int[] array = {1,2,3,4,5,6,7,8};int a = Arrays.binarySearch(array,4);System.out.println(a);}

我们利用 binarySearch() 方法查找到数组 array 中指定的一个数,并返回下标。如果没有找到则返回一个负数。

数组排序

代码示例:

    public static void main(String[] args) {int[] array = {5,3,7,9,2,4,6,7,2};Arrays.sort(array);System.out.println(Arrays.toString(array));}

我们利用 sort() 方法将一个乱序的数组从小到大排序出来。

判断两个数组是否相等

代码示例:

    public static void main(String[] args) {int[] array1 = {1,2,3,4,5};int[] array2 = {1,2,3,4,5};boolean f = Arrays.equals(array1,array2);System.out.println(f);}

我们用方法 equqls() 来判断两个数组是否相等。如果相等则返回一个布尔值 true ,不相等返回false。

二维数组

二维数组本质上也就是一维数组 , 只不过每个元素又是一个一维数组。
数据类型 [][] 数组名称 = new 数据类型 [ 行数 ][ 列数 ] { 初始化数据 };

代码示例:

 

int[][] array1 = {{1,2,3},{4,5,6}};int[][] array2 = new int[][]{{1,2,3},{4,5,6}};int[][] array3 = new int[2][];

将二维数组转换成字符串

代码示例:

    public static void main(String[] args) {int[][] array = {{1, 2, 3}, {4, 5, 6}};System.out.println(Arrays.deepToString(array));}

运行结果为:

遍历二维数组

    public static void main(String[] args) {int[][] array = {{1, 2, 3}, {4, 5, 6}};for (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();}}

array.length 是数组 array 的行数,array[i].length 是数组 array 第 i 行的列数。

在Java中是允许不规则的二维数组出现的:

    public static void main(String[] args) {int[][] array = {{1, 2, 3}, {4, 5, 6,7},{8,9,10,11,12,13,14}};for (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();}}

输出为:

相关文章:

【Java】手把手学会数组的使用

数组的基本用法 创建数组 基本语法&#xff1a; // 动态初始化 数据类型 [] 数组名称 new 数据类型 [] { 初始化数据 }; // 静态初始化 数据类型 [] 数组名称 { 初始化数据 }; 代码示例&#xff1a; int[] array1 {1,2,3,4,5};int[] array2 new int[]…...

音视频开发9 FFmpeg 解复用框架--如何将一个影音文件(mp4文件/wav文件) 最终播放起来

一&#xff0c;播放器框架 二 常用音视频术语 容器&#xff0f;文件&#xff08;Conainer/File&#xff09;&#xff1a; 即特定格式的多媒体文件&#xff0c; 比如mp4、flv、mkv等。 媒体流&#xff08;Stream&#xff09;&#xff1a; 表示时间轴上的一段连续数据&#xff0…...

vue实现页面渲染时候执行某需求

1. 前言 在之前的项目中&#xff0c;需要实现一个监控token是否过期从而动态刷新token的功能&#xff0c;然而在登录成功后创建的监控器会在浏览器刷新点击或者是通过导航栏输入网址时销毁... 2. 试错 前前后后始过很多方法&#xff0c;在这里就记录一下也许也能为各位读者排…...

Python小游戏——俄罗斯方块

文章目录 项目介绍环境配置代码设计思路1.初始化和导入库&#xff1a;2.定义颜色和屏幕尺寸&#xff1a;3.定义游戏逻辑&#xff1a;4.游戏循环&#xff1a; 源代码效果图 项目介绍 俄罗斯方块游戏是一款经典的益智游戏&#xff0c;玩家通过旋转和移动各种形状的方块&#xff…...

Moto和Inter字节序

inter: 低地址按照start_bit位放低字节依次往高字节填充 MotoLsb: 低地址按照start_bit位放高字节&#xff0c;依次往低字节填充MotoMsb&#xff1a;高字节按照start_bit位放低地址&#xff0c;依次往高字节填充...

外汇天眼:野村证券和Laser Digital与GMO互联网集团合作发行日元和美元稳定币

野村控股和Laser Digital将与GMO互联网集团合作&#xff0c;在日本探索发行日元和美元稳定币。GMO互联网集团的美国子公司GMO-Z.com Trust Company, Inc. 在纽约州金融服务部的监管框架下&#xff0c;在以太坊、恒星币和Solana等主要区块链上发行稳定币。GMO-Z.com Trust Compa…...

Python怎么使用getattr?

getattr() 是 Python 的内置函数&#xff0c;用于获取对象的属性值。它接受三个参数&#xff1a;对象、属性名称以及一个可选的默认值。如果对象具有指定的属性&#xff0c;getattr() 会返回该属性的值&#xff1b;如果对象没有该属性&#xff0c;并且提供了默认值&#xff0c;…...

[算法] 优先算法(三):滑动窗口(上)

&#x1f338;个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 &#x1f3f5;️热门专栏:&#x1f355; Collection与数据结构 (92平均质量分)https://blog.csdn.net/2301_80050796/category_12621348.html?spm1001.2014.3001.5482 &#x1f9c0;Java …...

[蓝桥杯 2020 省 A1] 超级胶水

一.题目 题目描述 小明有 n 颗石子&#xff0c;按顺序摆成一排。 他准备用胶水将这些石子粘在一起。 每颗石子有自己的重量&#xff0c;如果将两颗石子粘在一起&#xff0c;将合并成一颗新的石子&#xff0c;重量是这两颗石子的重量之和。 为了保证石子粘贴牢固&#xff0…...

读书笔记分享

1.苏格拉底只在需要的时候才索取&#xff0c;那样便能以最少的物质满足自身的要求。他认为每个人都天生体质脆弱&#xff0c;只有在贫乏的环境中才会锻炼地强壮起来。生活中的大多数人认为&#xff0c;奢华才是幸福的生活。无休止的物质积聚&#xff0c;让人们每天生活在一个内…...

考试宝典——软件过程与管理重点知识总结

概论 软件工程三要素 过程方法工具 软件过程的定义 软件过程是用于软件开发及维护的一系列活动、方法及实践。 常见软件过程分类&#xff08;五大类&#xff09; 客户-供应商过程&#xff1a;内部直接影响到客户、外部直接影响开发、向客户交付软件以及软件正确操作与使用的过…...

穿越时空的工厂之旅:探索可视化三维场景的奥秘

在科技日新月异的今天&#xff0c;我们似乎总是在不断追求着更加高效、智能的生产方式。 传统的工厂管理方式往往依赖于平面图纸、纸质文档和现场巡查&#xff0c;这不仅效率低下&#xff0c;而且容易出错。而三维可视化技术通过3D建模和虚拟现实技术&#xff0c;将工厂内部的各…...

2024年推荐的适合电脑和手机操作的线上兼职副业平台

总是会有人在找寻着线上兼职副业&#xff0c;那么在如今的2024年&#xff0c;互联网提供了诸多方便&#xff0c;无论你是宝妈、大学生、程序员、外卖小哥还是打工族&#xff0c;如果你正在寻找副业机会&#xff0c;那么这篇文章将为你提供一些适合电脑和手机操作的线上兼职副业…...

传感器的静态特性

传感器的静态特性是指传感器在稳态&#xff08;输入量为常量或变化极慢时&#xff09;输入信号作用下&#xff0c;传感器输出与输入信号之间的关系。这种关系一般用曲线、数学表达式或表格来表示。传感器的静态特性是传感器的基本特性之一&#xff0c;其描述了传感器在不考虑迟…...

如果jupyter notebook不能实现网页自动跳转,参考下面的链接

一招搞定Jupyter-notebook命令行打开之后不能自动跳转浏览器_一招搞定jupter notebook命令行打开之后-CSDN博客...

顺序表实现通讯录项目

目录 一.实现功能&#xff1a; 二.文件结构 三.代码实现 1.初始化 2.通讯录的销毁 3.通讯录添加数据 4.通讯录删除数据 5.通讯录的修改 6.展现通讯录数据 7.通讯录查找 四.代码 SeqList.h Contact.h Contact.c test(通讯录).c 一.实现功能&#xff1a; ⾄少能够存…...

【ai】pycharm设置软件仓库编译运行基于langchain的chatpdf

联想笔记本 y9000p创建python工程: 使用langchain支持openai的向量化embedding安装软件包 发现没有openai ,添加软件仓库打开工具窗口 点击设置...

LeetCode:279.完全平方数

class Solution:def numSquares(self, n: int) -> int:dp[i for i in range(n1)]for i in range(2,n1):for j in range(1,int(i**(0.5))1):dp[i]min(dp[i],dp[i-j*j]1)return dp[-1]代码解释 初始化 DP 数组&#xff1a; dp [i for i in range(n1)] 这里&#xff0c;dp[i]…...

Python面试宝典:Python中与ORM技术(对象关系映射)相关的面试笔试题(1000加面试笔试题助你轻松捕获大厂Offer)

Python面试宝典:1000加python面试题助你轻松捕获大厂Offer【第二部分:Python高级特性:第十五章:数据库编程:第二节:ORM技术】 第十五章:数据库编程第二节:ORM技术SQLAlchemyDjango ORMORM技术的优势和劣势python中与ORM技术相关的面试笔试题面试题1面试题2面试题3面试题…...

VUE3+TS+elementplus创建table,纯前端的table

一、前言 开始学习前端&#xff0c;直接从VUE3开始&#xff0c;从简单的创建表格开始。因为自己不是专业的程序员&#xff0c;编程主要是为了辅助自己的工作&#xff0c;提高工作效率&#xff0c;VUE的基础知识并不牢固&#xff0c;主要是为了快速上手&#xff0c;能够做出一些…...

Prompt Tuning、P-Tuning、Prefix Tuning的区别

一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...

Appium+python自动化(十六)- ADB命令

简介 Android 调试桥(adb)是多种用途的工具&#xff0c;该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具&#xff0c;其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利&#xff0c;如安装和调试…...

遍历 Map 类型集合的方法汇总

1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...

Day131 | 灵神 | 回溯算法 | 子集型 子集

Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 笔者写过很多次这道题了&#xff0c;不想写题解了&#xff0c;大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...

Opencv中的addweighted函数

一.addweighted函数作用 addweighted&#xff08;&#xff09;是OpenCV库中用于图像处理的函数&#xff0c;主要功能是将两个输入图像&#xff08;尺寸和类型相同&#xff09;按照指定的权重进行加权叠加&#xff08;图像融合&#xff09;&#xff0c;并添加一个标量值&#x…...

Rapidio门铃消息FIFO溢出机制

关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系&#xff0c;以下是深入解析&#xff1a; 门铃FIFO溢出的本质 在RapidIO系统中&#xff0c;门铃消息FIFO是硬件控制器内部的缓冲区&#xff0c;用于临时存储接收到的门铃消息&#xff08;Doorbell Message&#xff09;。…...

中医有效性探讨

文章目录 西医是如何发展到以生物化学为药理基础的现代医学&#xff1f;传统医学奠基期&#xff08;远古 - 17 世纪&#xff09;近代医学转型期&#xff08;17 世纪 - 19 世纪末&#xff09;​现代医学成熟期&#xff08;20世纪至今&#xff09; 中医的源远流长和一脉相承远古至…...

LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》

这段 Python 代码是一个完整的 知识库数据库操作模块&#xff0c;用于对本地知识库系统中的知识库进行增删改查&#xff08;CRUD&#xff09;操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 &#x1f4d8; 一、整体功能概述 该模块…...

【无标题】湖北理元理律师事务所:债务优化中的生活保障与法律平衡之道

文/法律实务观察组 在债务重组领域&#xff0c;专业机构的核心价值不仅在于减轻债务数字&#xff0c;更在于帮助债务人在履行义务的同时维持基本生活尊严。湖北理元理律师事务所的服务实践表明&#xff0c;合法债务优化需同步实现三重平衡&#xff1a; 法律刚性&#xff08;债…...

ZYNQ学习记录FPGA(一)ZYNQ简介

一、知识准备 1.一些术语,缩写和概念&#xff1a; 1&#xff09;ZYNQ全称&#xff1a;ZYNQ7000 All Pgrammable SoC 2&#xff09;SoC:system on chips(片上系统)&#xff0c;对比集成电路的SoB&#xff08;system on board&#xff09; 3&#xff09;ARM&#xff1a;处理器…...