【JAVA |数组】数组定义与使用、常见的Arrays类介绍

news2024/11/24 18:39:53

目录

一、前言

二、数组的创建和初始化

三、数组的使用 

四、数组是引用类型

1.JVM的内存分配

 2.与引用类型变量

 3.null

五、二维数组

六、Java中Arrays类的常用方法

1. Arrays.fill ->填充数组

2. Arrays.sort ->数组排序

3. Arrays.toString ->数组打印

4. Arrays.equals ->比较数组是否相等

5. Arrays.binarySearch ->二分查找法找指定元素的索引值(下标)

6.Arrays.copeOf ->复制代码


一、前言

内存在连续存储的一段空间,相同类型数据的集合


二、数组的创建和初始化

在C语言中数组的创建格式为int arr[ ],但是在JAVA中数组的创建格式为int[ ] arr

创建数组有这几种方法

  • arr1创建并对其数组进行初始化,指定数组中的元素,前面的方括号空着,JAVA会根据数组中的值自动分配空间
  • arr2是创建一个可以容纳10个int类型元素的数组 
  • arr1和arr3是等价的,可以省略了nrw int[ ]

如果没有对数组进行初始化,数组中元素有其默认值

如果数组中存储元素类型为引用类型,默认值为null


三、数组的使用 

数组在内存中是一段连续的空间,空间的编号都是从 0 开始的,依次递增,该编号称为数组的下标,数组可以通过 下标访问其任意位置的元素
下标从 0 开始,介于 [0, N )之间不包含 N N 为元素个数,不能越界,否则会报出下标越界异常。

在打印数组的时候,在JAVA相比于C语言可以这样实现

在数组中可以通过 数组对象.length 来获取数组的长度 

也可以使用 for-each 遍历数组,和上述方法实现的结果一样的

for-each for 循环的另外一种使用方式. 能够更方便的完成对数组的遍历. 可以避免循环条件和更新语句写错. 


四、数组是引用类型

1.JVM的内存分配

在JAVA中,JVM 也对所使用的内存按照功能的不同进行了划分

  • 程序计数器 (PC Register): 只是一个很小的空间, 保存下一条执行的指令的地址
  • 虚拟机栈(JVM Stack): 与方法调用相关的一些信息,每个方法在执行时,都会先创建一个栈帧,栈帧中包含 有:局部变量表操作数栈动态链接返回地址以及其他的一些信息,保存的都是与方法执行时相关的一 些信息。比如:局部变量。当方法运行结束后,栈帧就被销毁了,即栈帧中保存的数据也被销毁了
  • 本地方法栈(Native Method Stack): 本地方法栈与虚拟机栈的作用类似. 只不过保存的内容是Native方法的局部变量. 在有些版本的 JVM 实现中(例如HotSpot), 本地方法栈和虚拟机栈是一起的
  • (Heap): JVM所管理的最大内存区域. 使用 new 创建的对象都是在堆上保存 (例如前面的 new int[]{1, 2, 3} )堆是随着程序开始运行时而创建,随着程序的退出而销毁,堆中的数据只要还有在使用,就不会被销
  • 方法区(Method Area): 用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数 . 方法编译出的的字节码就是保存在这个区域

 2.与引用类型变量

大家来看下面这段代码

a b 是内置类型的变量,其空间中保存的就是给该变量初始化的值;array是数组类型的引用变量

,相当于C语言中的指针用来接受数组的首地址。

引用变量并不直接存储对象本身,可以简单理解成存储的是对象在堆中空间的起始地址。通过该
地址,引用变量便可以去操作对象。

 3.null

null Java 中表示 " 空引用 " , 也就是一个不指向对象的引用 . 类似于 C 语言中的 NULL ( 空指针 ), 都是表示一个无效的内存位置 . 因此不能对这个内存进行任何读写操作. 一旦尝试读写 , 就会抛出 NullPointerException.

五、二维数组

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

 以上3种方法都是正确的在JAVA中二维数组的行不能省略列可以省略并且在给一个二维数组初始化的时候每一行都要拿花括号围起来(每一行都是一个一维数组),这与C语言中还是有差异的

  • arr1中创建了一个3行的二维数组(3个一维数组所组成的数组)
  • arr2中创建了一个3行的二维数组,每行的大小可以是不一样的
  • arr3中初始化并创建了一个3行的二维数组,每行的大小是不一样的

二维数组的用法和一维数组并没有明显差别


六、Java中Arrays类的常用方法

Arrays类位于 java.util 包中,主要包含了操作数组的各种方法。使用前得包含它的util包

    import java.util.Arrays;

1. Arrays.fill ->填充数组

既能实现对不同数据类型数组进行全部分配,也能实现范围分配

 以int类型举例子


2. Arrays.sort ->数组排序

既能实现对不同数据类型数组进行全部排序,也能实现范围排序

 以int类型举例子 

 


3. Arrays.toString ->数组打印

打印出来数组的内容

 以int类型举例子 

 


4. Arrays.equals ->比较数组是否相等

比较两个数组是否元素相同,并返回对应的布尔值

  以int类型举例子 


5. Arrays.binarySearch ->二分查找法找指定元素的索引值(下标)

二分查找使用前需要排序,既能实现对不同数据类型数组进行全部查找,也能实现范围查找

  以int类型举例子 

6.Arrays.copeOf ->复制代码

既能实现对不同数据类型数组进行全部复制,也能实现范围复制,同时可以扩容!!

   以int类型举例子 


希望对你有帮助

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

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

相关文章

管易云与金蝶K3-WISE对接集成发货单查询2.0打通新增销售出库(红蓝字)

管易云与金蝶K3-WISE对接集成发货单查询2.0打通新增销售出库(红蓝字) 源系统:管易云 金蝶管易云是金蝶集团旗下以电商和新零售为核心业务的子公司,公司于2008年成立,拥有从事电商及新零售业务相关专业知识工作者超过1000人。为伊利…

ODOO17数据库安全策略一(ODOO17 Database Security Policy I)

ODOO17作为ERP软件,其核心优势在于数据安全。凭借强大的原生安全机制及灵活的配置,确保数据安全无忧: ODOO17, as an ERP software, boasts its significant advantage in exceptional data security performance. It effectively ensures wo…

中国护照照片尺寸分辨率要求及居家自拍制作教程

经常出国的小伙伴都知道,护照照片作为出国旅行的重要身份证明文件,其规格和质量要求非常严格。本文将详细介绍中国护照照片的具体要求,并提供一些实用的居家自拍技巧,帮助您轻松拍出符合规定的护照照片(手机和相机居家…

项目解决方案:多台poe摄像机接到3台NVR上,如何进行统一管理

目录 一、概述 二、建设目标及需求 三、设计依据与设计原则 1、先进性与适用性 2、经济性与实用性 3、可靠性与安全性 4、开放性 5、可扩充性 6、追求最优化的系统设备配置 7、提高监管力度与综合管理水平 四、建设方案设计 (一)系统方案设计…

roblox国际服游戏充值付款订阅Robux套装商城会员,roblox国际服虚拟信用卡充值教程

roblox是一款由Roblox公司开发的大型多人在线游戏创建平台,该平台允许用户设计自己的游戏、物品及衣服,以及游玩自己和其他开发者创建的各种不同类型的游戏。 没有账号注册一个账号,他支持多种平台授权登录,我这里直接选择注册一个…

FlashAttention(flash-attn)安装

FlashAttention(flash-attn)安装 Flash Attention是一种注意力算法,用于减少这一问题,并更有效地缩放基于转换器的模型,从而实现更快的训练和推理。标准注意力机制使用高带宽内存(HBM)来存储、…

回归测试?

1. 什么是回归测试(Regression Testing) 回归测试是一个系统的质量控制过程,用于验证最近对软件的更改或更新是否无意中引入了新错误或对以前的功能方面产生了负面影响(比如你在家中安装了新的空调系统,发现虽然新的空…

PaddleOCR使用

最近在项目过程中需要用到文字识别的能力,之前没有接触过。需要对现有的开源能力进行调研和学习。 1. 基本概念 1.1 PaddlePaddle PaddlePaddle 是一个由百度开源,基于 Python 的深度学习框架。PaddlePaddle 针对不同的硬件环境提供了不同的安装包或安…

极验4 一键解混淆

提示!本文章仅供学习交流,严禁用于任何商业和非法用途,未经许可禁止转载,禁止任何修改后二次传播,如有侵权,可联系本文作者删除! AST简介 AST(Abstract Syntax Tree)&a…

书名号怎么打?4个输入方法请记好!

“我在电脑上对文档进行编辑时,需要输入书名号,但不知道书名号怎么打。大家平常是怎么输入书名号的呀?可以分享一下吗?” 在撰写文档、编辑文章或发送信息时,我们经常需要用到书名号。书名号主要用于标明书名、篇名、报…

数据库系统概论(超详解!!!)第七节 关系数据库理论

1.问题的提出 关系数据库逻辑设计: 针对具体问题,如何构造一个适合于它的数据模式 针对一个具体问题,构造出一个适合于它的数据模式,即应该构造几个关系,每个关系由哪些属性组成等。 数据库逻辑设计的工具──关系…

Omnity 进展月报 | 2024.4.1-4.30

Omnity 大事摘要 1、Octopus 官宣升级为 Omnity。 2、Omnity 4月28号正式上线,实现BTC 和 ICP 之间跨链转账 Runes 资产。 3、为庆祝上线,以符文 HOPE•YOU•GET•RICH 为资产,发红包快速触达大量用户,体验跨链服务。 4、Omni…

kubebuilder(6)webhook

operator中的webhook也是很重要的一块功能。也是相对比较独立的模块,所以放在后面讲。 webhook是一个callback,注册到k8s的api-server上。当某个特定的时间发生时,api server就会查询注册的webhook,并根据一些逻辑确认转发消息给…

抖音小店是什么?它和直播带货有什么区别和联系?一篇详解!

大家好,我是电商糖果 在网上大家都说抖音的流量大,在抖音做电商比较赚钱。 可是有很多人对抖音电商并不了解。 甚至搞不懂抖音小店是什么?它和直播带货的区别和联系也不清楚。 下面,糖果就来给大家好好解答一下这个问题。 抖音…

Educational Codeforces Round 165 (Div. 2) A~E

A.Two Friends (思维) 题意: 小 A A A想开一个派对。他有 n n n个朋友,他希望至少有 2 2 2个朋友参加他的派对。 i i i 这个朋友最好的朋友是 p i p_i pi​ 。所有的 p i p_i pi​ 都是不同的,对于每一个 i ∈ [ 1 , n ] i \in [1, n] …

HTTP深度指南:协议结构、请求方法与状态码

详解HTTP HTTP教程HTTP消息结构HTTP状态码HTTP和HTTPS HTTP教程 HTTP(超文本传输协议,HyperText Transfer Protocol)是一种用于分布式、协作式、超媒体信息系统的应用层协议。* HTTP是一个基于TCP/IP通信协议来传递数据的(HTML文…

【源码】[完美接单]亲测双端获取通讯录、相册、短信定位源码

源码介绍 无hb源码,需要反编译。 此款修复了逻辑,现在全部能获取。包括华为鸿蒙。 安卓可获取:短信定位相册通讯录 IOS可获取:定位相册通讯录 源码截图 CD:获取方式联系小编 微信:uucodes 公众号&…

7天精通Web APIs——-Bom操作(理论+实战)(第五天)

一、window对象 1.1 window对象和bom的关系 首先理解dom和bom之间的关系 显然bom的范围比较大 bom的全称为浏览器对象模型 window是bom的核心对象,window里面有很多属性和方法,用于实现浏览器与 JavaScript 代码之间的交互。作为 JavaScript 的全局对…

Vue中使用$t(‘xxx‘)实现中英文切换;

(原文链接) 介绍 {{$t(key)}} :是VueI18n插件提供的函数,主要用于根据当前语言环境返回对应的翻译文本,以便在页面上显示多语言内容。 key:作为参数传递给函数$t()的字符串,用于指定需要翻译的…

快速入门 Postman Mock Server 的使用

Postman 作为一个功能强大的 API 开发工具,凭借 Mock Servers 功能,使得开发者能够轻松而高效地模拟服务器环境,加快开发与测试进程。 启动 Mock Servers 服务 当你在 Postman 中创建一个新的项目时,系统默认并不会显示 Mock Se…