数组的定义与使用

news2024/12/23 13:27:14

文章目录

  • 数组的基本概念
    • 为什么要使用数组
    • 什么是数组
    • 数组的创建及初始化
      • 数组的创建
      • 数组的初始化
    • 数组的使用
      • 数组中元素的访问
      • 遍历数组
  • 数组是引用类型
    • 基本数据类型与引用类型变量的区别
    • 认识null
  • 数组的应用场景
    • 保存数据
    • 作为函数的参数
      • 参数传基本数据类型
      • 参数传数组类型
    • 作为函数的返回值
  • 数组练习
    • 数组转字符串
    • 数组拷贝
  • 二维数组

数组的基本概念

为什么要使用数组

假设我们要储存五名同学的数学成绩,并对其进行输出,

public class Test {


    //为什么要使用数组
    public static void main(String[] args) {
        int student1 = 89;
        int student2 = 82;
        int student3 = 68;
        int student4 = 90;
        int student5 = 73;
        System.out.println(student1);
        System.out.println(student2);
        System.out.println(student3);
        System.out.println(student4);
        System.out.println(student5);
    }
}

在这种情况下,我们发现我们需要重复的创建变量,这大大降低了我们写代码的效率。我们发现这些数据的类型是相同的,这时我们就可以使用变量。

什么是数组

数组:相同类型元素大的一个集合。 在内存中是一段连续的空间。
【数组的特点】

  • 数组中存放的元素类型相同;
  • 数组的空间的是连在一起的;
  • 每个空间都有自己单独的编号,其初始位置是0,即数组的下标。

那么我们如何创建数组呢?

数组的创建及初始化

数组的创建

T[] 数组名 = new T[N];

T:表示数组存放元素的类型
T[]:数组的数据类型;
N:表示数组的长度。

【数组创建的示例】

//数组创建的示例
    public static void main(String[] args) {
        int[] array2 = new int[5];
        double[] array3 = new double[3];
    }

数组的初始化

数组的初始化主要分为两种类型:动态初始化和静态初始化

  1. 动态初始化:在创建数组的时候,直接指定数组中元素的个数

int[] array = new int[10];

  1. 静态初始化:在创建数组时不直接指定数据元素个数,而直接将具体的数据内容进行指定

int[] array = new int{1,2,3,4,5,6};
int[] array = {1,2,3,4,5,6};

【注意事项】

  • 静态初始化虽然没指定数组的长度,编译器在编译时会根据{}中的元素个数来确定数组的长度;
  • 静态初始化时,{}中数据类型必须与[]前数据类型一致;
  • 静态初始化可以简写,省略后面的new T[]. (但是在编译器编译代码时还是会还原,自动加上省略的部分);
  • 数组也可以按照C语言一样创建数组,但是我们不会去使用这种方法,但是语法是支持的。

int[] array = new int[5];
int array[] = new int[5]; //语法支持,但不推荐;
int array[5] = new int[5];//语法不支持

  • 静态和动态初始化可以分为两步,但是不可以省略格式;

int[] array1;
array1 = new int[10];
int[] array2;
array2 = new int[]{10,20,30};
//array2 = {1,2,3} 这种格式是错误的。

  • 如果没有对数组进行初始化,数组中元素有其默认值,1. 如果数组中储存元素类型为基类类型,默认为基类类型对应的默认值:比如:byte\short\int\long 类型默认值为 0float 默认值为 0.0f double 默认值为 0.0char 类型默认值为 /u0000, ***boolean 默认值为 false ***. 2.如果数组中储存元素类型为引用类型,其默认值为 null

数组的使用

数组中元素的访问

//数组元素的访问
    public static void main(String[] args) {
        int[] array = new int[]{1,2,3,4,5};
        for (int i = 0; i < array.length; i++) {
            System.out.println(array[i]);
        }
    }

【注意事项】

  1. 数组是一段连续的内存空间,因此支持随机访问,即通过下标可快速访问任意元素
  2. 下标从0开始,介于[0,N)

遍历数组

遍历:是指将数组中的所有元素都访问一遍。
【三种遍历数组的方法】

//数组元素的访问
    public static void main(String[] args) {
        int[] array = new int[]{1,2,3,4,5};
        for (int i = 0; i < array.length; i++) {
            System.out.println(array[i]);
        }
        for (int x: array) {
            System.out.println(x);
        }
        System.out.println(Arrays.toString(array));
    }

第一种遍历的方式,我们能够轻松理解;
第二种我们可以使用 for-each 遍历数组;
第三种我们可以使用 java 提供的包内的方法来遍历数组。
在这里插入图片描述

数组是引用类型

基本数据类型与引用类型变量的区别

基本变量:基本数据类型所创立的变量,空间存放的是所对应的值;
引用变量:引用数据类型说创建的变量,其空间中储存的是对象所在空间的地址。

//基本数据类型和引用数据类型所存放的位置
    public static void main(String[] args) {
        int a = 29;
        int b = 99;
        double[] array = new double[]{3.14, 1.56, 4.99};
    }

在上述代码中a\b\array,都是函数内部的变量,因此其开辟的空间都在main方法对应的栈帧中分配。

  • a\b都是内置类型的变量,其空间中储存的都是该变量的值。
  • array是数组类型的引用变量,其内部保存的内容可以简单理解成是数组在堆空间中的首地址。
    在这里插入图片描述
    引用变量不直接储存数据的值,而是在堆区开辟新的空间,在堆区存放数据,而在栈中存放对应堆区的地址。

认识null

***null 在Java中表示“空引用”,也就是一个不指向对象的引用。

//null
    public static void main(String[] args) {
        int[] array = null;
        System.out.println(array[0]);
    }

在这里插入图片描述
null 的作用类似于C语言的空指针,都是表示一个无效的内存地址,如果我们对它进行操作会导致空指针异常问题(NullPointerException)

Java中没有约定 null 与 0 号地址有任何关系。

数组的应用场景

保存数据

//数组的应用场景 保存数据
    public static void main(String[] args) {
        int[] students = {99, 100, 66};
        for (int x: students) {
            System.out.print(x + " ");
        }
    }

作为函数的参数

参数传基本数据类型

  //参数传基本数据类型
    public static int func(int num) {
        num = 0;
        return num;
    }

    public static void main(String[] args) {
        int num = 20;
        func(num);
        System.out.println(num);
    }

在这种情况下,形参只是实参的临时拷贝,我们修改形参的值,并不会影响实参。

参数传数组类型

    //参数传数组类型
   public static int[] func (int[] array) {
       for (int i = 0; i < array.length; i++) {
           array[i] = i;
       }
       return array;
   }

   public static void main(String[] args) {
       int[] array = {10, 20, 30};
       func(array);
       for (int x: array) {
           System.out.print(x + " ");
       }
   }

我们发现,如果对引用类型进行数值上的修改,数组的内容会真的改变。
总结:所谓的引用本质上只是存了一个地址。Java中将数组设定成引用类型,这样的话后续进行数组参数传参,***其实只是将数组的地址传到函数的形参当中,但是使用的仍让是堆上相同的空间。
在这里插入图片描述

作为函数的返回值

示例:获取斐波那契数列的前N项

 //作为方法的返回值 获取斐波那契数列的前N项
    public static int[] fibonacci (int num) {
        int[] array = new int[num];
        array[0] = 1;
        array[1] = 1;
        for (int i = 2; i < num; i++) {
            array[i] = array[i-1] + array[i-2];
        }
        return array;
    }

    public static void main(String[] args) {
        int n = 9;
        System.out.println(Arrays.toString(fibonacci(n)));
    }

数组练习

数组转字符串

 //数组转字符串
    public static void main(String[] args) {
        int[] array = {10, 20, 30, 40, 50};
        String str = Arrays.toString(array);
        System.out.println(str);

    }

Java中提供了 Java.util.Arrays 包,其中包含了一些操作数组的常用方法。

数组拷贝

//数组拷贝
    public static void main(String[] args) {
        int[] array = {10, 20, 30, 40, 50, 60};
        //copyOf 方法进行拷贝,并会建立一个新的数组
        int[] newArr1 = Arrays.copyOf(array, array.length);
        System.out.println(Arrays.toString(newArr1));
        //拷贝某个范围
        int[] newArr2 = Arrays.copyOfRange(array, 2, 5);
        System.out.println(Arrays.toString(newArr2));
    }

二维数组

二维数组本质上就是一维数组,只不过每个元素又是一个一维数组。
【基本语法】

数据类型[][] 数组名称 = new 数据类型[行数][列数]{初始化数据类型};

【代码示例】

 //二维数组
    public static void main(String[] args) {
        int[][] array1 = {{1,2}, {3,4}};
        int[][] array2 = new int[][]{{1,2}, {3,4}};
        int[][] array3 = new int[2][2];
        int[][] array4 = new int[2][];
    }

二维数组创建的方式有四种,第一种和第二种直接初始化,第三种和第四种指定元素的个数,但不能初始化,这里与C语言有点不一样,Java中不要指定列数,指定相应的行数即可
二维数组我们在此处只做简单的了解。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

TFN T6300A 网络综合测试仪 以太网数据 千兆以太网测试仪 OTDR E1 PRI V.35/V.24 光功率计一体机

一款功能强大、便携式、方便使用、价格便宜的高性价比手持式以太网测试仪是企业中网络管理和维护人员的刚需仪器。好的以太网测试仪可以帮助工作人员迅速解决网络不通、网速慢、丢包、延迟等问题。 当今以太网测试仪市场参差不齐&#xff0c;说的功能一个比一个强&#xff0c;…

你的第一个基于Vivado的FPGA开发流程实践——二选一多路器

你的第一个基于Vivado的FPGA开发流程实践——二选一多路器 1 原理图 2 开发流程 首先我们先打开安装好的Vivado软件 创建一个文件 选择你的开发板 创建一个源文件 现在我们就可以根据原理使用Verilog代码实验这个功能了 module mux2( //端口列表a,b,sel,out);//交代端口类…

RabbitMQ第二个实操小案例——WorkQueue

文章目录RabbitMQ第二个实操小案例——WorkQueueRabbitMQ第二个实操小案例——WorkQueue 讲第二个案例之前&#xff0c;我们先看下前面第一个案例的模型&#xff1a; 可以看到&#xff0c;我们只有一个发布者和一个消费者&#xff0c;通过Queue队列&#xff0c;实现最简单的消…

02 【nodejs开发环境安装】

02 【nodejs开发环境安装】 1.版本介绍 在命令窗口中输入 node -v 可以查看版本0.x 完全不技术 ES64.x 部分支持 ES6 特性5.x 部分支持ES6特性&#xff08;比4.x多些&#xff09;&#xff0c;属于过渡产品&#xff0c;现在来说应该没有什么理由去用这个了6.x 支持98%的 ES6 特…

e智团队实验室项目-第三周-经典的卷积神经网络的学习

e智团队实验室项目-第三周-卷积神经网络的学习 赵雅玲 *, 张钊* , 李锦玉&#xff0c;迟梦瑶&#xff0c;贾小云&#xff0c;赵尉&#xff0c;潘玉&#xff0c;刘立赛&#xff0c;祝大双&#xff0c;李月&#xff0c;曹海艳&#xff0c; (淮北师范大学计算机科学与技术学院&am…

【树莓派不吃灰】基础篇⑱ 从0到1搭建docker环境,顺便安装一下emqx MQTT Broker、HomeAssistant、portainer

目录1. 前言2. 搭建docker环境3. docker简介3.1 docker解决什么问题&#xff1f;3.2 docker VS vm虚拟机3.2.1 vm虚拟机3.2.2 docker3.3 docker如何解决问题&#xff1f;3.4 docker运行架构3.4.1 镜像 : image3.4.2 容器 : container3.4.3 仓库 : repository3.5 国内镜像加速3.…

python easygui怎么修改默认按钮名字

1.执行以下代码找到easygui安装位置 import easyguiprint(easygui.__file__)2.打开上述路径下boxes文件夹下需要修改的组件 如此时想要修改选项栏的默认按钮名字 则打开choice_box.py文件 执行如下图 可以看到有Cancel、SelectALL、ClearALL、OK四个默认按钮&#xff0c;可否…

Linux下动静态库的制作与使用

学习导航一、关于动静态库的基本认识二、设计库的工程师角度(1)制作静态库(2)制作动态库二、使用库的用户角度(1)使用静态库(2)使用动态库三、理解的角度一、关于动静态库的基本认识 1.静态库 静态库以 .a 作为文件后缀程序在编译链接的时候&#xff0c;将静态库的代码拷贝到…

[TCP/IP] Linux 搭建服务器局域网

文章目录[TCP/IP] Linux 搭建服务器局域网1. 使用python内置库http.server2. 使用Http-Server[TCP/IP] Linux 搭建服务器局域网 1. 使用python内置库http.server python3: http.server 命令行启动&#xff1a; # python 3 python -m http.server 8000 # python 2 python -m S…

ZYNQ_FPGA_SPI通信协议多种实现方式

文章目录PLPSSPIGPIOAXI-GPIOAXI-Quad-SPI&#xff08;待测试&#xff09;本文记录一下在使用AD9363中的SPI通信问题&#xff0c;同时针对在ZYNQ系列开发板上实现SPI的方法做一个总结。ZYNQ系列包含了PL端和PS端&#xff0c;因为本科阶段有一定的ARM的开发经验&#xff0c;便想…

2022年,软件测试已经不吃香了吗?

最近因为疫情等各种原因&#xff0c;大厂裁员&#xff0c;失业等等频频受到关注。 不解释&#xff0c;确实存在&#xff0c;各行各业都很难&#xff0c;但是&#xff0c;说软件测试行业不吃香&#xff0c;我还真不认同&#xff08;不是为培训机构说好话&#xff0c;大环境不好…

JVM从入门到入魔,这份JVM必知必会的完整版带你彻底玩懂JVM

市面上各类 JVM 相关的资料虽多如牛毛&#xff0c;但是明显都很难让大家系统性地学明白&#xff0c;同时一线大厂技术面试现在 JVM 知识也是必考科目。 在大厂摸爬滚打 10 多年的 Java 高级技术专家全面梳理了系统化学习 JVM 的知识和经验&#xff0c;从入门到入魔&#xff0c…

位运算常用技巧以及练习

几个有趣的操作 利用或操作|和空格将英文字符转换成小写 // 可以变成小写i : a | fmt.Printf("%c\n", i)j : A | fmt.Printf("%c\n", j)利用与操作&和下划线把英文字符转换成大写 // 可以变成大写m : b & _n : B & _fmt.Printf("%c\n…

大数据ClickHouse进阶(二十七):ClickHouse服务监控

文章目录 ClickHouse服务监控 一、系统表 1、metrics 2、events 3、asynchronous_metrics

【爬虫系列】Python 爬虫入门(2)

接上篇&#xff0c;继续梳理 Python 爬虫入门的知识点。这里将重点说明&#xff0c;如何识别网站反爬虫机制及应对策略&#xff0c;使用 Selenium 模拟浏览器操作等内容&#xff0c;干货满满&#xff0c;一起学习和成长吧。 1、识别反爬虫机制及应对策略 1.1 测试网站是否开启…

项目中如何配置 Maven 为国内源

目录 1. 创建出一个 Maven 项目 2. 打开项目配置界面, 检查并配置国内源 2.1 打开配置界面 (当前项目界面和新项目配置界面) 2.2 搜索 "Maven" 2.3 设置 setting.xml (给此 xml 中添加国内源) 2.4 把上面的步骤 (2.1~2.3) 在新项目的配置界面中重新配置一遍. …

【MySQL】MySQL事务隔离机制与实现原理详解(MySQL专栏启动)

&#x1f4eb;作者简介&#xff1a;小明java问道之路&#xff0c;专注于研究 Java/ Liunx内核/ C及汇编/计算机底层原理/源码&#xff0c;就职于大型金融公司后端高级工程师&#xff0c;擅长交易领域的高安全/可用/并发/性能的架构设计与演进、系统优化与稳定性建设。 &#x1…

加权黑猩猩优化算法(WChOA)附Matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;修心和技术同步精进&#xff0c;matlab项目合作可私信。 &#x1f34e;个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信条&#xff1a;格物致知。 更多Matlab仿真内容点击&#x1f447; 智能优化算法 …

Java实现五子棋(附源码)

文章目录一、游戏介绍二、效果展示三、代码展示1、登录页面2、算法程序3、棋盘实现四、资源下载五、文末总结一、游戏介绍 今天给大家分享一个用java写的小游戏——《五子棋》 &#xff08;完整代码可在【资源下载】目录查看&#xff09; 。五子棋是一种两人对弈的纯策略型棋类…

中缀表达式转后缀表达式

1 后缀表达式 一种不需要括号的表达式方法&#xff0c;也把它称为 逆波兰表达式&#xff0c;是波兰逻辑学家卢卡西维奇&#xff08;Lukasiewicz)发明的一种表示表达式的方法。 2 中缀表达式 中缀表达式也就是我们常见的表达式书写方法&#xff0c;比如“8(2-1)352”就是一个中…