Java深入数组

news/2024/5/6 3:04:01/文章来源:https://blog.csdn.net/qq_42900213/article/details/126981160

Java深入数组

1、数组概念

数组就是存储数据长度固定的容器,保证多个数据的数据类型要一致

2、数组的初始化

Java语言中数组必须先初始化才能使用,所谓初始化就是为数组的数组元素分配内存空间,并为每个数组元素赋初始值。一旦数组的初始化完成,数组在内存中所占用的空间将被固定下来,即数组的长度不可改变。

2.1、动态初始化

指定数组的长度:

int size = 10;
type[] arrayName = new type[size]; //推荐使用这一种,可读性较好
arrayName type[] = new type[size];
2.2、静态初始化

指定数组的内容:

int[] arr = new int[]{1,2,3,4,5};
int[] arr = {1,2,3,4,5};
注意:不要同时使用静态初始化与动态初始化,即不要在数组初始化时既指定数组长度又给每个数组元素分配初始值。
2.3、初始化填充数组
int[] arrName = new int[5];
Arrays.fill(arrName, 1);    // [1, 1, 1, 1, 1]
2.4、数组元素各类型初始值

基本类型中的整数类型(byte,short,int,long):0

基本类型中的浮点类型(float,double):0.0

基本类型中的字符类型(char):‘\u0000’

基本类型中的布尔类型(boolean):false

引用类型(类,接口,数组):null

3、数组的使用

数组最常用的方法就是访问数组元素:

arrayName[index];   //数组的索引从0开始
ayyayName[0] = 10;  //为0位置赋值10
int len = arrayName.length;      //获取数组的长度
int len2 = arrayName[0].length;  //获取二维数组第一维的第一个数组长度

4、数组的foreach循环

Java5之后可以进行foreach循环遍历数组和集合;

String[] names = {"Fe","Tom","Hxy","Ajax"}
for(String name : names){System.out.println(name);
}
/*
output : FeTomHxyAjax
*/    

当使用foreach循环迭代访问数组时,foreach中的循环变量相当于一个临时变量,系统会把数组元素依次赋值给这个临时变量,而这个临时变量并不是数组元素,它只是保存了数组元素的值。

所以如果想改变数组的元素值,则不能使用foreach循环。

String[] names = {"Fe","Tom","Hxy","Ajax"}
for(String name : names){name = Fee;System.out.println(name);
}
System.out.println(names[0]);
/*
output : FeeFeeFeeFeeFe
*/  

5、内存中的数组

数组是一种引用数据类型,数组引用变量只是一个引用,数组元素数组变量在内存里时分开存放的。

public static void main(String[] args) {int[] a = {25,4,45,21,7};int[] b = new int[3];System.out.println(a);    //输出的是数组在内存中的地址System.out.println(a[2]); //0
}

数组在内存中的存储示意图

程序的执行流程:

  1. main方法进入方法栈执行
  2. 创建数组,JVM会在堆内存中开辟空间,存储数组
  3. 数组在内存中会有自己的内存地址,以十六进制数表示
  4. 对于b,数组中有个元素,默认值为0
  5. JVM将数组的内存地址赋值给引用类型变量b
  6. 变量b保存的是数组内存中的地址,而不是一个具体数值,因此称为引用数据类型。
//让b的引用指向a引用指向的数组
b = a;

b引用指向a引用所指向数组后的存储示意图

6、Java8工具类Arrays

Java提供的Arrays类里包含的一些static修饰的方法可以直接操作数组,这个Arrays类里包含了如下几个static修饰的方法(static修饰的方法可以直接通过类名调用)。

type[] copyOf(type[] original, int length);
//这个方法将会把 original数组复制成一个新数组,其中,length是新数组的长度。
//如果length大于original数组的长度,则新数组的前面元素就是原数组的所有元素,后面补充0(数值类型)、false(布尔类型)或者null(引用类型)。
type[] copyOfRange(type[] original, int from, int to);
//这个方法与前面方法相似,但这个方法只复制original数组的from索引到to索引的元素。
boolean equals(type[]a, type[]a2);
//如果a数组和a2数组的长度相等,而且a数组和a2数组的数组元素也一一相同,该方法将返回true。
void fill(type[]a, type val);
//该方法将会把a数组的所有元素都赋值为val。
void fill(type[] a, int fromIndex, int toIndex, type val);
//该方法与前一个方法的作用相同,区别只是该方法仅仅将a数组的fromIndex到 toIndex索引的数组元素赋值为 val。
void sort(type[] a);
//该方法对a数组的数组元素进行排序。
void sort(type[] a,int fromIndex,int toIndex);
//该方法与前一个方法相似,区别是该方法仅仅对fromIndex到toIndex索引的元素进行排序。
String toString(type[] a);
//该方法将一个数组转换成一个字符串。该方法按顺序把多个数组元素连缀在一起,多个数组元素使用英文逗号(,)和空格隔开。
XxxStream stream(xxx[] array);
//该方法将数组转换为Stream,Stream是Java8新增的流式编程的API。
XxxStream stream(xxx[]array, int startInclusive, int endExclusive);
//该方法与上一个方法相似区别是该方法仅将fromIndex到toIndex索引的元素转换为Stream。

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

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

相关文章

ELK优雅开启密码登录认证

ELK登录认证 当我们安装好ELK后,默认是可以直接访问到kibana的,可以直接查看收集到的信息,这样很不安全。 很多人采用的是Nginx代理来做登录验证功能,这也是一种实现方式,但是我们还有另一种更加优雅的方式&#xff0c…

Vue2.0 —— Vue.nextTick(this.$nextTick)源码探秘

Vue2.0 —— Vue.nextTick(this.$nextTick)源码探秘 《工欲善其事,必先利其器》 一、知识储备 在学习这个 API 之前,我们需要进行一定量的知识储备,并且是从最基础的开始: nextTick,译为&…

激光雷达物体检测(二):点视图检测算法

综述: 1.点视图: PointNet/PointNet,Point-RCNN,3D SSD 2.俯视图: VoxelNet,SECOND,PIXOR,AFDet 3.前视图: LaserNet,RangeDet 4.多视图融合: 俯视图…

谷粒商城 高级篇 (十九) --------- 消息队列

目录一、概述二、应用三、RabbitMQ 概念四、安装 RabbitMQ五、RabbitMQ 运行机制Exchange 类型六、RabbitMQ 整合七、RabbitMQ 消息确认机制1. ConfirmCallback2. ReturnCallback3. Ack 消息确认机制一、概述 大多应用中,可通过消息服务中间件来提升系统异步通信、…

python实现图像添加噪声、噪声处理、滤波器代码实现

目录 加载图像添加噪声 图像傅里叶变换和反变换并可视化 图像处理---高通滤波、低通滤波、带通滤波 低通滤波器---Butterworth低通滤波器、理想低通滤波器、高斯低通滤波器 加载图像添加噪声 高斯噪声是指它的概率密度函数服从高斯分布(即正态分布)…

Linux设置开机自启动Java程序--三种方式

Linux设置开机自启动Java脚本程序 缘起 公司内部的服务器中有个SpringCloud项目需要运行,之前都是通过nohup java-jar .. &的命令来执行的,但是这个cloud项目服务太多,手动启动太麻烦而且容易出错,干脆写个执行java的脚本好…

C++内存管理(每日更新)

文章目录0 概述0.1 四个层面的基本用法1 Primitives1.1 new expression1.2 delete expression1.3 调用构造函数与析构函数1.4 array new & array delete1.4.1 array new0 概述 C应用程序malloc非常重要 可以看出,C内存管理主要是有四个层面 0.1 四个层面的基本…

NFT重构票务系统

什么是NFT? NFT是运行在区块链上的一种不可分割的凭证(Non-Fungible Token),或者称为非同质化代币。NFT目前主要用在数字艺术品的铸造、拍卖、流转,因为一个NFT能唯一地确定它的所有者,并可在链上跟踪每一…

自然语言语义分析研究进展_笔记

自然语言语义分析研究进展_笔记 词语语义分析:确定词语意义,衡量两个词之间的语义相似度或相关度; 句子语义分析:研究包含句义分析和句义相似度分析两方面; 文本语义分析:识别文本的意义、主题、类别等语义信息的过程&#xff…

使用@JsonFormat并进一步了解:格式化java.util.Date对象

Java 8 Spring Boot 2.7.3 jackson 2.13.3 -- ben发布于博客园 0、前言 开发过程中遇到问题: 前端调用接口得到的时间对象(java.util.Date)总是存在这样那样的问题。 调查后发现,可以使用 @JsonFormat注解(来自jackson依赖包)解决相关问题。 ben发布于博客园 新建spring …

区块链分叉带来的安全挑战

区块链分叉分为软分叉和硬分叉。本文主要探讨的是硬分叉,一种不支持向后兼容的软件升级方式。硬分叉是共识的分裂或者改变,共识就是区块链系统中各节点达成数据一致性的算法,正常情况下每个节点需要运行相同规则的算法,例如比特币…

计算机毕业设计之java+javaweb的影院管理系统-电影院管理系统

计算机毕业设计之javajavaweb的影院管理系统-电影院管理系统 项目介绍 影院的需求和管理上的不断提升,影院管理的潜力将无限扩大,影院管理系统在业界被广泛关注,本网站及对此进行总体分析,将影院信息管理的发展提供参考。影院管理系统对影院发展有着明显的带动效应,尤其对当地影…

【ManageEngine】OpManager 2022用户体验报告

关于SoftwareViews SoftwareReviews是Info-Tech Research Group的一个部门,是一家世界级的技术研究和咨询公司,拥有超过20年的基于研究的IT建议和技术实施。 SoftwareViews务实的工具和详细的客户洞察力帮助软件购买者在技术决策中取得最大成功。 Sof…

Java并发编程解析 | 基于JDK源码解析Java领域中ReentrantLock锁的设计思想与实现原理 (一)

苍穹之边,浩瀚之挚,眰恦之美; 悟心悟性,善始善终,惟善惟道! —— 朝槿《朝槿兮年说》写在开头在并发编程领域,有两大核心问题:一个是互斥,即同一时刻只允许一个线程访问共享资源;另一个是同步,即线程之间如何通信、协作。主要原因是,对于多线程实现实现并发,一直以…

全能赛道、热门方向、稀缺数据,“嬴彻-清华AIR杯”自动驾驶技术大赛火热开赛中

如果你关注自动驾驶,那有这样一个算法大赛,值得参与。由卡车自动驾驶领导者嬴彻科技与清华大学智能产业研究院(AIR)精心打造的“嬴彻-清华AIR杯”自动驾驶技术挑战赛正火热开赛中。这是国内首个同时覆盖干线物流和城市道路双赛道的大赛。决策规划是自动驾驶当下的热门方向和技术…

go语言的基本数据类型

基本数据类型中的常量已经介绍了 var const iota 。此处要对字符串特别说明,字符串也会被认为是基本数据类型,字符串实际在底层原理上与复合类型的数据非常相似。同事go语言支持八进制,6进制,科学计数法。空指针的值是nil。 整…

百度地图API

一、百度地图API接入 1、搜索百度地图开发平台 2、注册百度账号 3、登陆并申请成为开发者 4、在百度地图开发平台的首页选择控制台,在控制台中创建应用 创建好应用以后就能在控制台我的应用中看到这个应用,其中最重要的是AK,这是百度地图…

从0-1,如何用低代码搭建管理系统

关键字:功能模块、流程中心、OA 前言:对于搭建系统,字眼上都知道是怎么回事,但要怎么搭建到最后怎么呈现一个投入运作的系统,估计就很少人知道了。当然作为专业的程序员肯定知道怎么操作,但是不是必须要专业…

IDEA集成Git

介绍 参考视频教程: https://www.bilibili.com/video/BV1vy4y1s7k6?p27 1 配置 Git 忽略文件 1.1为什么要配置 问题 1:为什么要忽略他们? 答:与项目的实际功能无关,不参与服务器上部署运行。把它们忽略掉能够屏蔽 IDE 工具之 间的差异。…

湖仓一体电商项目(十八):业务实现之编写写入DWD层业务代码

文章目录 业务实现之编写写入DWD层业务代码 一、代码编写 二、​​​​​​​​​​​​​​创建Iceberg-DWD层表 1、在Hive中添加Iceberg表格式需要的包 2、创建Iceberg表 三、代码测试 1、在Kafka中创建对应的topic 2、将代码中消费Kafka数据改成从头开始消费 3、执…