当前位置: 首页 > 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…...

国防科技大学计算机基础课程笔记02信息编码

1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制&#xff0c;因此这个了16进制的数据既可以翻译成为这个机器码&#xff0c;也可以翻译成为这个国标码&#xff0c;所以这个时候很容易会出现这个歧义的情况&#xff1b; 因此&#xff0c;我们的这个国…...

深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录

ASP.NET Core 是一个跨平台的开源框架&#xff0c;用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录&#xff0c;以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...

边缘计算医疗风险自查APP开发方案

核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...

iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版​分享

平时用 iPhone 的时候&#xff0c;难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵&#xff0c;或者买了二手 iPhone 却被原来的 iCloud 账号锁住&#xff0c;这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...

将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?

Otsu 是一种自动阈值化方法&#xff0c;用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理&#xff0c;能够自动确定一个阈值&#xff0c;将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...

视频字幕质量评估的大规模细粒度基准

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用&#xff0c;因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型&#xff08;VLMs&#xff09;在字幕生成方面…...

leetcodeSQL解题:3564. 季节性销售分析

leetcodeSQL解题&#xff1a;3564. 季节性销售分析 题目&#xff1a; 表&#xff1a;sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...

是否存在路径(FIFOBB算法)

题目描述 一个具有 n 个顶点e条边的无向图&#xff0c;该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序&#xff0c;确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数&#xff0c;分别表示n 和 e 的值&#xff08;1…...

OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 在 GPU 上对图像执行 均值漂移滤波&#xff08;Mean Shift Filtering&#xff09;&#xff0c;用于图像分割或平滑处理。 该函数将输入图像中的…...

Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信

文章目录 Linux C语言网络编程详细入门教程&#xff1a;如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket&#xff08;服务端和客户端都要&#xff09;2. 绑定本地地址和端口&#x…...