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

目录

一、前言

二、数组的创建和初始化

三、数组的使用 

四、数组是引用类型

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类型举例子 


希望对你有帮助

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数据中台:企业数字化转型的驱动力量_光点科技

在当今数字化快速发展的时代,企业正积极寻求转型升级的新路径。在这个过程中,数据中台以其独特的功能和价值,逐渐成为了企业数字化转型的关键驱动力。本文将深入探讨数据中台的角色、架构及其在企业中的应用,以期为企业的数字化转…

十个数据安全最佳实践:保护数据的简单方法

在德迅云安全将介绍数据安全的主要原则,并了解适用于大多数行业的 10 种数据安全最佳实践,以及云端安全检测的重要性。 数据威胁和维护数据安全的好处 什么是数据安全? 数据安全是旨在保护组织敏感资产的流程和工具的组合。有价值的数据在…

多核DSP并行计算跨平台通信解决方案

并行计算的核心是计算节点以及节点间的通信与协调机制。OpenMP虽然给开发者提供了极易上手的增量式开发方式,但是OpenMP在与复杂架构的MCSDK结合后,工具与代码产生了大量不可调试的黑盒子,更是决定了它不能用于关键任务领域,如军工…

C语言(指针)1

Hi~!这里是奋斗的小羊,很荣幸各位能阅读我的文章,诚请评论指点,关注收藏,欢迎欢迎~~ 💥个人主页:小羊在奋斗 💥所属专栏:C语言 本系列文章为个人学习笔记&#x…

用python写个控制MicroSIP自动拨号和定时呼叫功能(可用在小型酒店叫醒服务)

首先直接上结果吧,MicroSIP 助手,控制MicroSIP自动拨号,定时呼叫的非常实用小工具! 在使用MicroSIP 助手之前,我们需要了解MicroSIP是什么,MicroSIP是一个SIP拨号软件,支持注册任意SIP平台实现拨…

Linux学习笔记:信号

信号 在Linux中什么是信号信号的产生方式硬件产生的信号软件产生的信号异常产生的信号 进程对信号的处理信号的保存信号方法更改函数signal信号处理的更改恢复默认信号忽略 信号的管理信号集 sigset_t对信号集的操作 信号的捕捉过程 在Linux中什么是信号 在 Linux 系统中&…

Python中tkinter编程入门1

1 tkinter库简介 tkinter是Python的标准库,用来进行GUI(Graphical User Interface,图形用户界面)编程。 2 导入tkinter库 tkinter是Python默认的GUI库,因此,IDLE中已经包含了该库,使用时无需…

在uniapp中如何安装axios并解决跨域问题

目录 1、安装axios 2、导入 3、使用(发请求) 2.解决跨域问题 1.为什么要解决跨域问题? 2.前端如何解决跨域问题? 1、安装axios npm install axios 2、导入 在main.js中导入使用 import axios from axios; // 创建一个名…

男士内裤什么品牌质量好?男士内裤选购指南攻略分享

有很多小伙伴认为男士内裤只是穿在里面的,只要能穿就不讲究了。但实际上选择一些质量不好的男士内裤会让穿着舒适性十分不佳,同时还会因为不具备抗菌效果而滋生细菌,导致出现健康问题。 最近我也是深入研究了一番关于男士内裤,今天…

旺店通·企业奇门与金蝶云星空对接集成订单查询打通销售订单新增

旺店通企业奇门与金蝶云星空对接集成订单查询打通销售订单新增 对接源平台:旺店通企业奇门 慧策最先以旺店通ERP切入商家核心管理痛点——订单管理,之后围绕电商经营管理中的核心管理诉求,先后布局流量获取、会员管理、仓库管理等其他重要经营模块。慧策…

该怎么发外贸开发信才能瞄准大客户?

1.要知道80%的业务源自于大客户,要合理利用自己的时间。其实我自己发邮件一直都是粗发模式,效果也还可以,主要是因为我的客户都是展会上的,所以拒收和失败率会很低,而且客户意向度一直很高,但是花费的时间精…

泉州晋江厦门拉货最便宜的7个方式,建议收藏

众所周知,搬家、拉货的时间长、距离长,运费也比较贵。面对不菲的费用,很多人会比较谨慎,先网上搜搬家攻略,一番对比以后,找到最便宜的运输方式。那怎么运输最便宜最放心呢? 方式一:找…

[MDK] 介绍STM32使用C和C++混合编程的方法

目录 [MDK] 介绍STM32使用C和C混合编程的方法前言业务场景步骤1基础工程步骤2写代码步骤3添加cpp文件步骤4配置与编译上机现象后记 [MDK] 介绍STM32使用C和C混合编程的方法 前言 搞单片机编程大多数还是使用MDK编程,自己对MDK这个软件也比较熟悉,在网络…

【RAG 论文】Dense X 检索:将“命题”作为检索粒度

论文:Dense X Retrieval: What Retrieval Granularity Should We Use? ⭐⭐⭐⭐ Code: github.com/ct123098/factoid-wiki 文章目录 一、论文速读二、命题(Proposition)三、FactoidWiki四、实验及分析4.1 Passage Retrieval 任务4.2 Open-Do…

前端css中径向渐变(radial-gradient)的使用

前端css中径向渐变的使用 一、前言二、主要内容说明(一)、径向渐变的形状1.椭圆形渐变(ellipse),源码12.源码1运行效果3.圆形渐变(circle),源码24.源码2运行效果 (二&…

遇到螺纹连接过程中的软连接,怎么办?——SunTorque智能扭矩系统

智能扭矩系统-智能拧紧系统-扭矩自动控制系统-SunTorque 在螺纹连接过程中遇到软连接时,首先需要明确软连接的概念及其特点。软连接通常指的是在螺栓拧紧过程中,由于紧固件与被连接件之间的材料、表面状况或装配工艺等因素,导致拧紧力矩不能…

分布式关系型数据库管理系统 OceanBase 安装和配置教程

🌊 分布式关系型数据库管理系统 OceanBase 安装和配置教程 🚀 博主猫头虎的技术世界 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能! 专栏链接: 🔗 精选专栏: 《面试题大全》 — 面试准备的宝…

Kubernetes核心概念基本操作

1.1 Namespace命名空间 1.1.1 Namespace核心概念 Kubernetes 的 Namespace(命名空间)是一种用于创建逻辑隔离分区的机制,它的主要作用是用来实现多套环境的资源隔,它允许用户在同一个物理集群中模拟出多个虚拟集群的效果。以下是…

APP广告变现:自刷的秘密与规则

在移动互联网时代,广告已成为众多APP盈利的主要方式之一。对于开发者和运营者而言,如何通过广告变现提高收益是他们必须关注的问题。然而,在众多的变现方法中,“自刷广告”这一概念可能让一些人感到迷惑。实际上,只要在…

在Mars3d实现cesium的ImageryLayer自定义瓦片的层级与原点

需要自定义瓦片层级和原点,所以需要自己写第三方图层,但是之前写的很多方法,图层控制和显隐以及透明度,需要跟之前的交互一直,改动量太大的话不划算,所以直接看Mars3d的layer基类,把重写的image…