当前位置: 首页 > news >正文

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};}
}

2cdafec003e9469d86a3da41e1f677e7.png

如上面同时所示,同时指定数组的长度和数组的内容就会报错。

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.如果数组在创建时没有初始化数组的内容,数组中元素都有默认的其对应的零值。如下表

def4d192f7574cb880240f60f1a47dd5.png

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的内存分布。

如下图

31b8c26a211442d181ba43d13d36d451.jpeg

这里我们就先简单了解一下虚拟机栈和本地方法栈。

本地方法栈:本质是由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这个引用来访问数组中的元素。

60e597e813384f7eba83b39265e24e83.png

 我么再来看一段代码

 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数组。

3ea4eb8bbcc14c6f809bbe0f7b81442d.png

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

6b76762d9d7446ff8e864074a3b68e2a.png

接着我们又创建了arr2。

8de745c320754f558c34ad92799d477c.png

我们就可以通过arr2这个引用来访问arr2中的数据。

接着就是一个重点了,我们写了一个 arr2=arr1 的代码是什么意思呢?

简单来说就是将arr1中存储的地址传给arr2,arr2中存的数据就变为了0x9了。

那样arr2就不指向arr2了,而是指向了arr1。

这时侯,我们我们同过arr1或arr2这两个引用访问的都是arr1了。

而原先arr2指向的对象由于没有了引用,其在堆占的内存就自动被计算机系统回收了。

efe6fe6ead04450285f17686d4111c81.png

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

910c343ca01e40708239dd4d7defc7d1.png

运行代码

dcb58790b08642668e329b6ae1d73556.png

 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为例。

如下图所示

bd95f92e14d44ffb8f1e9bc39ef619e6.png

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

运行代码

2558195c0c7d4ea286cae0342eb2ae8f.png

相关文章:

Java----数组的定义和使用

1.数组的定义 在Java中&#xff0c;数组是一种相同数据类型的集合。数组在内存中是一段连续的空间。 2.数组的创建和初始化 2.1数组的创建 在Java中&#xff0c;数组创建的形式与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代码&#xff0c; 针对这个问题&#xff0c;go语言给我们内置了功能强大的testing测试框架&#xff0c; 其中一个很有意思的Example测试就非常的方便使用。 他不管你在什么包&#xff0c;也…...

数据库查询--条件查询

目录 1.关系运算条件的查询 2.逻辑运算符条件的查询 3.带关键字IN的查询 4.带BETWEEN AND关键字的查询 5.空值查询 6.带LIKE关键字的模糊查询 1.关系运算条件的查询 在SELECT语句中&#xff0c;最常见的是使用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 …...

颍川诞生了两个帝王的仲父

伯、仲、叔、季是古代兄弟的长幼排行顺序&#xff0c;《释名释亲属》载&#xff1a;“父之弟曰仲父……仲父之弟曰叔父”。也就是古代称父亲的兄弟为仲父&#xff0c;多用于帝王对宰相重臣的尊称。 历史上最有名的、有正史记载的帝王“仲父”有两位&#xff0c;而且都出自颍川…...

SpringAMQP发布、订阅——Fanout Exchange交换机代码模拟

发布订阅模型: MQ提供了很多交换机模型 其中常用的有下边三个: Fanout:广播 Direct:路由 Topic:话题 转换器只负责消息路由&#xff0c;不是存储&#xff0c;路由失败则消息丢失 Fanout Exchange:会将接收到的消息路由导每一个跟其绑定的queue. 利用SpringAMQP演示Fanout…...

js原生三种弹框

第一种&#xff1a; alert("提示内容")&#xff1a;提示弹框&#xff1b; alert("提示"); 第二种&#xff1a; prompt("内容","输入框默认值")&#xff1a;输入弹框&#xff0c;第一个值输入框提示内容&#xff0c;第二个值输入框默…...

LWIP+TCP客户端

一、TCP API函数 其中tcp_poll()函数的第三个参数表示隔几秒调用一次这个周期性函数 二、修改服务器的IP 三、TCP客户端编程思路 申请套接字绑定服务器IP和端口号等待客户端连接 进入连接回调函数在连接回调函数中 配置一些回调函数&#xff0c;如接收回调函数&#xff0c;周期…...

程序人生 | 人生如棋,落子无悔

人生的开始&#xff0c;始于哭声&#xff0c;浮浮沉沉几十年。终了&#xff0c;一声长叹&#xff0c;在一片哭声中撒手离去。 人生的道路虽然漫长&#xff0c;但是关键就是那么几次机会的选择&#xff0c;可以决定此后几十年的光阴。 有个故事讲&#xff1a;古代有个人去砍柴…...

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…...

一份简历的制作

个人简历是求职者面试前最需要准备的一项工具。一份好的简历可以帮助求职者获得更多的面试机会&#xff0c;并且为面试时的表现奠定基础。以下介绍制作简历的几个注意点&#xff0c;仅供参考。 一、个人信息 姓名*性别联系方式 &#xff08;手机号&#xff09;电子邮箱&#…...

网络匿名--不只是TOR

今天&#xff0c;我们将讨论互联网匿名和隐私&#xff1a; 如何隐藏你的真实身份。 什么是 TOR 。 如何以完全匿名的方式执行黑客任务。 如何使用proxy chain。 如何让我们的匿名性领先一步。 如何使用特定的操作系统保持匿名。 结论&#xff0c;如何实现互联网匿名和隐…...

【论文阅读笔记】Order Matters(AAAI 20)

个人博客地址 注&#xff1a;部分内容参考自GPT生成的内容 论文笔记&#xff1a;Order Matters&#xff08;AAAI 20&#xff09; 用于二进制代码相似性检测的语义感知神经网络 论文:《Order Matters: Semantic-Aware Neural Networks for Binary Code Similarity Detection》…...

中科院突破:TalkingGaussian技术实现3D人脸动态无失真,高效同步嘴唇运动!

DeepVisionary 每日深度学习前沿科技推送&顶会论文分享&#xff0c;与你一起了解前沿深度学习信息&#xff01; 引言&#xff1a;探索高质量3D对话头像的新方法 在数字媒体和虚拟互动领域&#xff0c;高质量的3D对话头像技术正变得日益重要。这种技术能够在虚拟现实、电影…...

fastText-文本分类

fastText介绍 fastText是一个快速文本分类算法,与基于神经网络的分类算法相比有两大优点: 1、fastText在保持高精度的情况下加快了训练速度和测试速度 2、fastText不需要预训练好的词向量,fastText会自己训练词向量 3、fastText两个重要的优化:Hierarchical Softmax、N-gr…...

【nodejs 命令行交互神器 - inquirer.js】

需求 大家在开发时&#xff0c;有时需要从命令行读取用户的输入&#xff0c;或者让用户选择。在nodejs中&#xff0c;这个怎么实现? 原生实现 ❌ process.stdin.setEncoding(utf8);process.stdin.on(readable, () > {let chunk;// 使用循环确保我们读取所有的可用输入wh…...

Liunx软件包管理(上)

目录 一.前言 二.rpm RPM 包的结构 安装与升级 卸载 查询 验证 信息输出 三.yum Yum 的特点 安装和卸载 查询和信息 仓库管理 维护和调试 常用选项 四.更换镜像源 常用的镜像源 更换镜像源基础操作 一.前言 Linux 的软件包管理是指在 Linux 操作系统中安…...

华为eNSP中型企业局域网网络规划设计(下)

→b站传送门&#xff0c;感谢大佬← →华为eNSP中型企业局域网网络规划设计&#xff08;上&#xff09;← →拓扑图传送门&#xff0c;可以自己配置着玩← 配置ospf AR3 [AR3]ospf 1 router-id 3.3.3.3 //出口默认路由 [AR3-ospf-1]default-route-advertise always #area…...

C语言(指针)1

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

基于matlab的简单数字验证码识别系统 【验证码识别】计算机视觉,数字图像处理,含GUI界面...

基于matlab的简单数字验证码识别系统 【验证码识别】计算机视觉&#xff0c;数字图像处理&#xff0c;含GUI界面。 步骤&#xff1a;图像降噪&#xff0c;二值化&#xff0c;定位数字&#xff0c;分割合并&#xff0c;字符识别。 功能&#xff1a;可识别简单的数字验证码图片&a…...

开箱即用环境+保姆级教程:深度学习项目训练环境助你快速入门AI

开箱即用环境保姆级教程&#xff1a;深度学习项目训练环境助你快速入门AI 1. 镜像环境概述 深度学习项目训练环境镜像是一个预装了完整深度学习开发环境的解决方案&#xff0c;专为快速启动AI项目而设计。这个镜像基于深度学习项目改进与实战专栏&#xff0c;集成了训练、推理…...

嵌入式技术学习路径与核心技能解析

嵌入式技术学习路径与资源整合指南1. 嵌入式技术体系概述嵌入式系统作为现代电子设备的核心&#xff0c;其技术栈涵盖从底层硬件到上层软件的完整知识体系。一个合格的嵌入式工程师需要掌握以下核心领域&#xff1a;1.1 基础编程能力C/C语言编程基础数据结构与算法计算机组成原…...

Audacity:5分钟快速掌握免费音频编辑的终极指南

Audacity&#xff1a;5分钟快速掌握免费音频编辑的终极指南 【免费下载链接】audacity Audio Editor 项目地址: https://gitcode.com/GitHub_Trending/au/audacity 想要专业级的音频编辑能力却不想支付高昂的费用&#xff1f;Audacity正是你寻找的解决方案&#xff01;…...

MLRSNet:多标签遥感数据集在语义场景理解中的创新应用

1. 遥感图像分析的痛点与多标签数据集的崛起 第一次接触遥感图像分析时&#xff0c;我盯着卫星照片里密密麻麻的像素点发懵——农田边缘的建筑物该算农业设施还是居民区&#xff1f;港口旁边的道路该标注为交通线还是工业配套&#xff1f;这种模棱两可的场景在传统单标签数据集…...

从二极管到全桥整流:5种电源防反接方案全对比,看完就知道你的项目该选哪个

从二极管到全桥整流&#xff1a;5种电源防反接方案全对比与选型指南 在嵌入式系统、消费电子和工业设备开发中&#xff0c;电源反接是最容易被忽视却可能造成灾难性后果的设计漏洞之一。想象一下&#xff1a;一个花费数月研发的物联网终端&#xff0c;因为现场安装人员的误操作…...

springboot-vue基于web框架的高校教材征订管理系统的设计与实现

目录技术选型与架构设计核心功能模块划分数据库设计要点开发阶段规划关键技术实现方案部署与运维方案项目技术支持源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作技术选型与架构设计 后端技术栈 采用Spring Boot作为核心框架&#xff0c;整…...

GitOps实战:用ArgoCD监控GitLab仓库,实现K8s部署的“无人值守”与一键回滚

GitOps实战&#xff1a;ArgoCD与GitLab深度整合的自动化部署与回滚策略 1. GitOps核心价值&#xff1a;从理论到实践 在云原生技术快速发展的今天&#xff0c;GitOps已成为现代DevOps实践中不可或缺的一环。与传统CI/CD流程相比&#xff0c;GitOps将Git仓库作为唯一可信源&…...

ESP32开发终极指南:5个关键更新助你构建更强大的物联网设备

ESP32开发终极指南&#xff1a;5个关键更新助你构建更强大的物联网设备 【免费下载链接】arduino-esp32 Arduino core for the ESP32 项目地址: https://gitcode.com/GitHub_Trending/ar/arduino-esp32 ESP32 Arduino核心项目为ESP32系列芯片提供了完整的Arduino开发环境…...

如何用浏览器扩展将网页内容一键转换为AI知识库

如何用浏览器扩展将网页内容一键转换为AI知识库 【免费下载链接】anything-llm 这是一个全栈应用程序&#xff0c;可以将任何文档、资源&#xff08;如网址链接、音频、视频&#xff09;或内容片段转换为上下文&#xff0c;以便任何大语言模型&#xff08;LLM&#xff09;在聊天…...