Java----数组的定义和使用
1.数组的定义
在Java中,数组是一种相同数据类型的集合。数组在内存中是一段连续的空间。
2.数组的创建和初始化
2.1数组的创建
在Java中,数组创建的形式与C语言又所不同。
Java中数组创建的形式
T[] 数组名 = new T[N];
1.T表示数组存放的数据类型。
2.T[]表示数组的类型。
3.N表示数组的长度。
2.2数组的初始化
数组的初始化分为动态初始化和静态初始化两种。
2.2.1 动态初始化
动态初始化就是在创建数组的时候,直接指定数组元素的个数。
如以下代码
int[]arr=new int[10];//10就是数组元素个数
2.2.2 静态初始化
静态初始化就是在创建数组的时候不指定数组中元素的个数,但指定数组的内容。
语法格式:
T[] 数组名称=new int[]{data1,data2,data3.....};
举例说明
public static void main(String[] args) {int[] arr=new int[]{1,2,3,4,5};String[] man=new String[]{"red","man","lebron"};double[] arr2=new double[]{1.2,1.2,2.5};}
注意事项:
1.在Java中,数组在创建的同时不能同时指定数组的长度和数组的内容。否则就会报错。
public class CSDN {public static void main(String[] args) {int[] arr=new int[5]{1,2,3,4,5};String[] man=new String[4]{"red","man","lebron"};double[] arr2=new double[5]{1.2,1.2,2.5};}
}

如上面同时所示,同时指定数组的长度和数组的内容就会报错。
2.虽然静态初始化没有指定数组的长度,编译器在编译时会根据 { } 里面的元素来确定数组的长度。
3.静态初始化时,{ } 里面的元素的数据类型必须和数组创建时声明的数据类型相同。
4.静态初始化可以简写,后面的new T[]可以省略掉。
public static void main(String[] args) {int[] arr={1,2,3,4,5};String[] man={"red","man","lebron"};double[] arr2={1.2,1.2,2.5};}
2.2.3 总结共同点
动态初始化和静态初始化都可以分两步写。
//动态初始化分两步int[] arr;arr=new int[10];
//静态初始化分两步写int[] arr2;arr2=new int[]{1,2,3,4,5,6};
注意:分两步进行初始化时,new T[ ] 这部分不能省略。
2.2.4 补充
1.数组的创建其实可以像C语言那样创立,但是不推荐。
2.如果数组在创建时没有初始化数组的内容,数组中元素都有默认的其对应的零值。如下表

2.3 数组的访问和遍历
2.3.1数组的访问
数组在内存中是一段连续的空间,空间的编号都是从0开始,一次递增。这些编号也就是数组的下标,我们可以通过数组的下标来访问数组中的元素。
比如:
int[]array = new int[]{10, 20, 30, 40, 50};
System.out.println(array[0]);
System.out.println(array[1]);
System.out.println(array[2]);
System.out.println(array[3]);
System.out.println(array[4]);
如上面的代码所示,0,1,2,3,4就是数组的下标,我们就通过这些下标来访问数组中对应的元素。
2.3.2 数组的遍历
数组的遍历就是将数组的元素都浏览一遍。
在Java中,我们有两种遍历数组的方法。
重点:在Java中,我们可以通过 数组名.length 来获取数组的长度。
1.for循环遍历数组
public static void main(String[] args) {int[] arr=new int[]{1,2,3,4,5};for(int i=0;i<arr.length;i++){System.out.print(arr[i]+" ");}}
2.foreach循环
public static void main(String[] args) {int[] arr=new int[]{1,2,3,4,5};for(int x:arr){System.out.print(x+" ");}}
foreach循环的做法是遍历数组,一次将数组中的元素放入x中。
3.数组是引用数据类型
3.1JVM的内存分布
在介绍引用数据类型之前,我们先来简单介绍以下JVM的内存分布。
如下图

这里我们就先简单了解一下虚拟机栈和本地方法栈。
本地方法栈:本质是由C/C++构造的一些方法,我们可以直接使用。
虚拟机栈:就是我们平常学习计算机语言说的栈。
3.2引用数据类型
在JAVA中,我们的数据类型分为基本数据类型和基本数据类型。
基本数据类型创建的变量被称为基本变量,其内存中存的是变量的值。
由引用数据类型创建的数据类型一般被称为对象的引用,其空间存储的是对象的地址。
什么是引用呢?
看一下代码
public static void main(String[] args) {int[] arr=new int[]{1,2,3,4,5};System.out.println(arr);int a=10;}
我们在创建变量的时候,计算机系统都会在栈中为变量开辟内存。
如以上代码,我们创建了一个数组变量和一个int变量,那么栈就会为这两个变量分配内存。
由于int a是基本数据类型,所以创建变量是赋值的10就直接占据了为变量a开辟的内存中。
而数组是引用数据类型, 其内存可以简单理解为寸的是数组的首元素地址。
所以,引用数据类型中存的地址,我们就可以说通过array这个引用来访问数组中的元素。

我么再来看一段代码
public static void main(String[] args) {int[] arr1=new int[]{1,2,3,4,5};arr1[0]=3;arr1[1]=4;int[] arr2=new int[]{10,20,30,40,50};arr2=arr1;arr1[0]=100;arr2[1]=200;for(int x:arr2){System.out.print(x+" ");}}
输出会是什么呢?
我们通过画图来分析代码
首先,我们创建了arr1数组。

我们就可以通过arr1这个引用来访问数组中的元素。接着我们对arr1进行了数组元素中的改变。

接着我们又创建了arr2。

我们就可以通过arr2这个引用来访问arr2中的数据。
接着就是一个重点了,我们写了一个 arr2=arr1 的代码是什么意思呢?
简单来说就是将arr1中存储的地址传给arr2,arr2中存的数据就变为了0x9了。
那样arr2就不指向arr2了,而是指向了arr1。
这时侯,我们我们同过arr1或arr2这两个引用访问的都是arr1了。
而原先arr2指向的对象由于没有了引用,其在堆占的内存就自动被计算机系统回收了。

所以最后两步都是对arr1数组数据的改变。

运行代码

4. 二维数组
4.1二维数组的创建和初始化
二维数组的创建和初始化我们直接以代码的形式介绍
public static void main(String[] args) {int[][] arr1=new int[][]{{1,2,3},{4,5,6}};int[][] arr2=new int[2][3];int[][] arr3={{1,2,3},{1,2,3}};}
主要有以上三种形式。
4.2 二维数组的遍历
首先,我们要清楚二维数组是一个特殊的一维数组。
Java中这个定义很清楚。
我们以arr1为例。
如下图所示

arr1是一个2行3列的数组,这个二维数组可以看作是有两个一维数组组成的。
其中arr1[0] 是访问arr1这个二维数组中第一个一维数组中的引用。
arr1[1]是访问arr1这个二维数组中的第二个一维数组的引用。
第一种遍历方法
public static void main(String[] args) {int[][] arr1=new int[][]{{1,2,3},{4,5,6}};int[][] arr2=new int[2][3];int[][] arr3={{1,2,3},{1,2,3}};for(int i=0;i<arr1.length;i++){//打印行for(int j=0;j<arr1[i].length;j++){//打印列System.out.print(arr1[i][j]+" ");}System.out.println();}}
第二种遍历方法
public static void main(String[] args) {int[][] arr1=new int[][]{{1,2,3},{4,5,6}};int[][] arr2=new int[2][3];int[][] arr3={{1,2,3},{1,2,3}};for(int[] subarr1:arr1){for(int x:subarr1){System.out.print(x+" ");}System.out.println();}
}
4.3 不规则二维数组
首先,我们要知道二维数组在创建的时候,行不可以省略,列可以省略。
public static void main(String[] args) {int arr[][]=new int[2][];arr[0]=new int[]{1,2,3};arr[1]=new int[]{4,5,6,70};for(int i=0;i< arr.length;i++){for(int j=0;j<arr[i].length;j++){System.out.print(arr[i][j]+" ");}System.out.println();}}
运行代码

相关文章:
Java----数组的定义和使用
1.数组的定义 在Java中,数组是一种相同数据类型的集合。数组在内存中是一段连续的空间。 2.数组的创建和初始化 2.1数组的创建 在Java中,数组创建的形式与C语言又所不同。 Java中数组创建的形式 T[] 数组名 new T[N]; 1.T表示数组存放的数据类型…...
【C++】-QT多线程-006
1【QT】多线程 #ifndef MYWIDGET_H #define MYWIDGET_H#include <QWidget>namespace Ui { class MyWidget; }class MyWidget : public QWidget {Q_OBJECTpublic:explicit MyWidget(QWidget *parent 0);~MyWidget();/* 5 自定义信号*/ /*所有的信号函数只声明不定义&…...
vscode go语言开发中在任意包运行和调试代码 Example使用方法
一般情况下我们在进行go语言开发的时候我们都需要创建一个main方法和main包才能运行go代码, 针对这个问题,go语言给我们内置了功能强大的testing测试框架, 其中一个很有意思的Example测试就非常的方便使用。 他不管你在什么包,也…...
数据库查询--条件查询
目录 1.关系运算条件的查询 2.逻辑运算符条件的查询 3.带关键字IN的查询 4.带BETWEEN AND关键字的查询 5.空值查询 6.带LIKE关键字的模糊查询 1.关系运算条件的查询 在SELECT语句中,最常见的是使用WHERE字句指定关系运算条件对数据进行过滤。 语法格式&#x…...
用 Python 和 AkShare 进行个股数据清洗:源码剖析和建议优化
这是《个股清洗源码》一个获取股票买卖盘信息并将其打印到控制台并保存到文件的脚本。 下面我们来对源码进行剖析 先复习一下源码 import os import akshare as ak from akshare import stock_bid_ask_em from datetime import datetime import pandas as pd from io import …...
颍川诞生了两个帝王的仲父
伯、仲、叔、季是古代兄弟的长幼排行顺序,《释名释亲属》载:“父之弟曰仲父……仲父之弟曰叔父”。也就是古代称父亲的兄弟为仲父,多用于帝王对宰相重臣的尊称。 历史上最有名的、有正史记载的帝王“仲父”有两位,而且都出自颍川…...
SpringAMQP发布、订阅——Fanout Exchange交换机代码模拟
发布订阅模型: MQ提供了很多交换机模型 其中常用的有下边三个: Fanout:广播 Direct:路由 Topic:话题 转换器只负责消息路由,不是存储,路由失败则消息丢失 Fanout Exchange:会将接收到的消息路由导每一个跟其绑定的queue. 利用SpringAMQP演示Fanout…...
js原生三种弹框
第一种: alert("提示内容"):提示弹框; alert("提示"); 第二种: prompt("内容","输入框默认值"):输入弹框,第一个值输入框提示内容,第二个值输入框默…...
LWIP+TCP客户端
一、TCP API函数 其中tcp_poll()函数的第三个参数表示隔几秒调用一次这个周期性函数 二、修改服务器的IP 三、TCP客户端编程思路 申请套接字绑定服务器IP和端口号等待客户端连接 进入连接回调函数在连接回调函数中 配置一些回调函数,如接收回调函数,周期…...
程序人生 | 人生如棋,落子无悔
人生的开始,始于哭声,浮浮沉沉几十年。终了,一声长叹,在一片哭声中撒手离去。 人生的道路虽然漫长,但是关键就是那么几次机会的选择,可以决定此后几十年的光阴。 有个故事讲:古代有个人去砍柴…...
python的deap库使用记录
主要是在遗传符号回归的代码中添加了注释和根据一部分源码做了一点改动 import operator import random import numpy as np import matplotlib.pyplot as plt from deap import algorithms, base, creator, tools, gp from operator import attrgetter##生成数据 def generat…...
一份简历的制作
个人简历是求职者面试前最需要准备的一项工具。一份好的简历可以帮助求职者获得更多的面试机会,并且为面试时的表现奠定基础。以下介绍制作简历的几个注意点,仅供参考。 一、个人信息 姓名*性别联系方式 (手机号)电子邮箱&#…...
网络匿名--不只是TOR
今天,我们将讨论互联网匿名和隐私: 如何隐藏你的真实身份。 什么是 TOR 。 如何以完全匿名的方式执行黑客任务。 如何使用proxy chain。 如何让我们的匿名性领先一步。 如何使用特定的操作系统保持匿名。 结论,如何实现互联网匿名和隐…...
【论文阅读笔记】Order Matters(AAAI 20)
个人博客地址 注:部分内容参考自GPT生成的内容 论文笔记:Order Matters(AAAI 20) 用于二进制代码相似性检测的语义感知神经网络 论文:《Order Matters: Semantic-Aware Neural Networks for Binary Code Similarity Detection》…...
中科院突破:TalkingGaussian技术实现3D人脸动态无失真,高效同步嘴唇运动!
DeepVisionary 每日深度学习前沿科技推送&顶会论文分享,与你一起了解前沿深度学习信息! 引言:探索高质量3D对话头像的新方法 在数字媒体和虚拟互动领域,高质量的3D对话头像技术正变得日益重要。这种技术能够在虚拟现实、电影…...
fastText-文本分类
fastText介绍 fastText是一个快速文本分类算法,与基于神经网络的分类算法相比有两大优点: 1、fastText在保持高精度的情况下加快了训练速度和测试速度 2、fastText不需要预训练好的词向量,fastText会自己训练词向量 3、fastText两个重要的优化:Hierarchical Softmax、N-gr…...
【nodejs 命令行交互神器 - inquirer.js】
需求 大家在开发时,有时需要从命令行读取用户的输入,或者让用户选择。在nodejs中,这个怎么实现? 原生实现 ❌ process.stdin.setEncoding(utf8);process.stdin.on(readable, () > {let chunk;// 使用循环确保我们读取所有的可用输入wh…...
Liunx软件包管理(上)
目录 一.前言 二.rpm RPM 包的结构 安装与升级 卸载 查询 验证 信息输出 三.yum Yum 的特点 安装和卸载 查询和信息 仓库管理 维护和调试 常用选项 四.更换镜像源 常用的镜像源 更换镜像源基础操作 一.前言 Linux 的软件包管理是指在 Linux 操作系统中安…...
华为eNSP中型企业局域网网络规划设计(下)
→b站传送门,感谢大佬← →华为eNSP中型企业局域网网络规划设计(上)← →拓扑图传送门,可以自己配置着玩← 配置ospf AR3 [AR3]ospf 1 router-id 3.3.3.3 //出口默认路由 [AR3-ospf-1]default-route-advertise always #area…...
C语言(指针)1
Hi~!这里是奋斗的小羊,很荣幸各位能阅读我的文章,诚请评论指点,关注收藏,欢迎欢迎~~ 💥个人主页:小羊在奋斗 💥所属专栏:C语言 本系列文章为个人学习笔记&#x…...
第19节 Node.js Express 框架
Express 是一个为Node.js设计的web开发框架,它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用,和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...
Leetcode 3576. Transform Array to All Equal Elements
Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接:3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到…...
阿里云ACP云计算备考笔记 (5)——弹性伸缩
目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...
JavaScript 中的 ES|QL:利用 Apache Arrow 工具
作者:来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗?了解下一期 Elasticsearch Engineer 培训的时间吧! Elasticsearch 拥有众多新功能,助你为自己…...
Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件
今天呢,博主的学习进度也是步入了Java Mybatis 框架,目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学,希望能对大家有所帮助,也特别欢迎大家指点不足之处,小生很乐意接受正确的建议&…...
Golang dig框架与GraphQL的完美结合
将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用,可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器,能够帮助开发者更好地管理复杂的依赖关系,而 GraphQL 则是一种用于 API 的查询语言,能够提…...
相机从app启动流程
一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...
NFT模式:数字资产确权与链游经济系统构建
NFT模式:数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新:构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议:基于LayerZero协议实现以太坊、Solana等公链资产互通,通过零知…...
自然语言处理——Transformer
自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效,它能挖掘数据中的时序信息以及语义信息,但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN,但是…...
USB Over IP专用硬件的5个特点
USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中,从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备(如专用硬件设备),从而消除了直接物理连接的需要。USB over IP的…...
