【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();}}

输出为:

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

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

相关文章

JS、Go、Rust 错误处理的不同 - JS 可以不用 Try/Catch 吗?

原文&#xff1a;Mateusz Piorowski - 2023.07.24 先来了解一下我的背景吧。我是一名软件开发人员&#xff0c;有大约十年的工作经验&#xff0c;最初使用 PHP&#xff0c;后来逐渐转向 JavaScript。 大约五年前&#xff0c;我开始使用 TypeScript&#xff0c;从那时起&#…

Flume 的基本介绍和安装部署

一、Flume 概述 Flume 是 Cloudera 提供的一个高可用的&#xff0c;高可靠的&#xff0c;分布式的海量日志采集、聚合和传输的框架服务 Flume 基于流式架构&#xff0c;灵活简单&#xff0c;能够实时读取服务器本地磁盘的数据&#xff0c;将数据写入到 HDFS 二、Flume 基础架构…

Cloneable 接口和深拷贝,浅拷贝

目录 一.Cloneable 接口 二.浅拷贝 三.深拷贝 四.comparable接口、 五.comparator接口 1.Java 中内置了一些很有用的接口 , Cloneable 就是其中之一 . Object 类中存在一个 clone 方法 , 调用这个方法可以创建一个对象的 " 拷贝 ". 2.来说说调用 clone 方法…

基于深度学习的表情识别系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景 随着人工智能技术的快速发展&#xff0c;表情识别成为了人机交互领域的一个研究热点。表情识别技术旨…

Python数字比大小获取大的数

目录 一、引言 二、数字比较的基本语法 三、获取较大的数 使用条件语句 使用内置函数 四、处理特殊情况 比较非数字类型 处理无穷大和NaN 五、应用实例 在游戏开发中比较分数 在数据分析中找出最大值 六、优化与性能 七、总结 一、引言 在Python编程的广阔天地中…

巧秒用AI写作工具做影视解说文案,效率高!

在自媒体内容输出的快节奏当下&#xff0c;影视解说已经成为一种受欢迎的内容形式。然而&#xff0c;创作高质量的影视解说文案往往需要花费大量的时间和精力。随着人工智能技术的不断发展&#xff0c;AI写作工具为我们提供了一种全新的、高效的解决方案。 AI写作工具利用先进的…

AI服务器 IO互联芯片解决方案pcie switch国产替代博通

服务器是大数据、人工智能、区块链、云计算、元宇宙等的基础设施&#xff0c;全国每年400万台服务器出货&#xff0c;预计 2025年超过500万台&#xff08;中商产业研究院&#xff09;&#xff0c;高性能企业级互联芯片控制着服务器的神经系统和循环系统。 市场痛点&#xff1…

大厂程序员离职,开发一个盲盒小程序2万,一周开发完!

大家好&#xff0c;我是程序员小孟&#xff01; 前面接了一个盲盒的小程序&#xff0c;主要的还是商城&#xff0c;盲盒的话只是其中的有一个活动。 现在的年轻人是真的会玩&#xff0c;越来越新的东西出来&#xff0c;越来越好玩的东西流行。 就像最近很火的地摊盲盒。 讲…

第N4周:中文文本分类——Pytorch实现

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 | 接辅导、项目定制 数据集&#xff1a;train 一.加载数据 import torch import torch.nn as nn import torchvision from torchvision import transforms,d…

vue3的核心API功能:computed()API使用

常规使用方法: 这样是常规使用方法. 另一种使用方法: 这样分别定义computed的get回调函数和set回调函数, 上面例子定义了plusOne.value的值为1, 那么这时候就走了computed的set回调函数,而没有走get回调函数. 当我们打印plusOne.value的值的时候,走的是get的回调函数而不是…

ios 原生项目迁移flutter第一天环境

由于公司已经有第一个吃螃蟹的项目组&#xff0c;我在迁移的时候想着站在巨人的肩膀上&#xff0c;但是搭配环境一定要问清楚对方flutter版本&#xff0c;路径也要安排好&#xff0c;不然就不行。 对着自己的项目照着葫芦画瓢&#xff0c;我刚开始为了配置管理图个方便随便放&…

Unity3D读取Excel表格写入Excel表格

系列文章目录 unity工具 文章目录 系列文章目录&#x1f449;前言&#x1f449;一、读取Excel表格&#x1f449;二、写入Excel表格&#x1f449;三、Fileinfo和Directoryinfo的操作&#x1f449;四、壁纸分享&#x1f449;总结 &#x1f449;前言 有时候难免会遇到读取文件写…

提供一个c# winform的多语言框架源码,采用json格式作为语言包,使用简单易于管理加载且不卡UI,支持“语言分级”管理

提供一个c# winform的多语言框架源码&#xff0c;采用json格式作为语言包&#xff0c;不使用resx资源&#xff0c;当然本质一样的&#xff0c;你也可以改为resx 一、先看下测试界面 演示了基本的功能&#xff1a;切换语言&#xff0c;如何加载语言&#xff0c;如何分级加载语…

【webrtc】内置opus解码器的移植

m98 ,不知道是什么版本的opus,之前的交叉编译构建: 【mia】ffmpeg + opus 交叉编译 【mia】ubuntu22.04 : mingw:编译ffmpeg支持opus编解码 看起来是opus是1.3.1 只需要移植libopus和opus的webrtc解码部分即可。 linux构建的windows可运行的opus库 G:\NDDEV\aliply-0.4\C…

如何为社交feed场景设计缓存体系?no.35

Feed 流场景分析 Feed 流是很多移动互联网系统的重要一环&#xff0c;如微博、微信朋友圈、QQ 好友动态、头条/抖音信息流等。虽然这些产品形态各不相同&#xff0c;但业务处理逻辑却大体相同。用户日常的“刷刷刷”&#xff0c;就是在获取 Feed 流&#xff0c;这也是 Feed 流的…

达梦数据库详解

达梦认证是指针对中国数据库管理系统&#xff08;DBMS&#xff09;厂商达梦公司所推出的数据库产品&#xff0c;即达梦数据库&#xff08;DMDB&#xff09;&#xff0c;进行的一种官方认证体系。达梦认证旨在验证数据库管理人员对达梦数据库产品的掌握程度&#xff0c;及其在数…

【HUST】信道编码|基于LDPC码的物理层安全编码方案概述

本文对方案的总结是靠 Kimi 阅读相关论文后生成的&#xff0c;我只看了标题和摘要感觉确实是这么回事&#xff0c;并没有阅读原文。 行文逻辑&#xff1a;是我自己设定的&#xff0c;但我并不是这个研究领域的&#xff0c;所以如果章节划分时有问题&#xff0c;期待指出&#x…

FTP文件传输议

FTP是一种文件传输协议&#xff1a;用来上传和下载&#xff0c;实现远程共享文件&#xff0c;和统一管理文件 工作原理&#xff1a;用于互联网上的控制文件的双向传输是一个应用程序。工作在TCP/IP协议簇的&#xff0c;其传输协议是TCP协议提高文件传输的共享性和可靠性&#…

8.STL中Vector容器的常见操作(附习题)

目录 1.vector的介绍 2 vector的使用 2.1 vector的定义 2.2 vector iterator 的使用 2.3 vector 空间增长问题 2.3 vector 增删查改 2.4 vector 迭代器失效问题 2.5 vector 在OJ中的使用 1.vector的介绍 vector是表示可变大小数组的序列容器。 就像数组一样&#xff0…

【Unitydemo制作】音游制作—控制器与特效

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;就业…