java数据结构之数组系统了解

1.数组介绍

数组就是一个存储数据的容器,容器的长度固定、存储元素的数据类型固定。  

跟变量加以区分:变量也可以存储数据,但是只能存一个值。当要存的数据比较多的时候,用变量就不方便了。我们就可以使用数组来存储。

1.1数组的定义格式
1.1.1第一种格式

数据类型[] 数组名

示例:

数据类型【】 变量名 = 初始化值;
int[] arr;    
sout(arr)
double[] arr;      
char[] arr;
1.1.2第二种格式

​ 数据类型 数组名[]

​ 示例:

int arr[];
double arr[];
char arr[];

 我们通常采用第一种格式来定义数组。

1.2 数组的动态初始化

数组动态初始化就是只给定数组的长度,由系统给出默认初始化值。

数据类型[] 数组名 = new 数据类型[数组长度];
int[] arr = new int[3];
动态初始化格式详解
  • 等号左边:

    • int:数组的数据类型

    • []:代表这是一个数组

    • arr:代表数组的名称

  • 等号右边:

    • new:为数组开辟内存空间

    • int:数组的数据类型

    • []:代表这是一个数组

    • 3:代表数组的长度

public class Demo2Array {/*数组的动态初始化:在初始化的时候, 需要手动指定数组的长度, 系统会为数组容器分配初始值.
​动态初始化格式:数据类型[] 数组名 = new 数据类型[数组的长度];
​注意:打印数组变量的时候, 会打印出数组的内存地址
​[I@10f87f48 :
​@ : 分隔符[ : 当前的空间是一个数组类型I : 当前数组容器中所存储的数据类型10f87f48 : 十六进制内存地址
​0 1 2 3 4 5 6 7 8 90 1 2 3 4 5 6 7 8 9 a b c d e f*/public static void main(String[] args) {// 数据类型[] 数组名 = new 数据类型[数组的长度];// 通过new关键字创建了一个int类型的数组容器, 该容器可以存储5个int类型的整数, 该容器被arr数组变量所记录int[] arr = new int[5];// [I@10f87f48System.out.println(arr);
​byte[] bArr = new byte[3];// [B@b4c966aSystem.out.println(bArr);
​}
}
​
数组元素访问

索引:每一个存储到数组的元素,都会自动的拥有一个编号,从0开始。这个自动编号称为数组索引(index),也叫做下标。可以通过数组的索引访问到数组中的元素。

数组的索引范围:[0 , 数组.length-1]

数组元素访问格式:

获取值:

数据类型 变量名 = 数组名[索引];

sout(数组名[索引]);

赋值:

数组名[索引] = 变量;//表示把变量中的值,赋值给数组中对应的索引上。

数组名[索引] = 数据值;//表示把数据,赋值给数组中对应的索引上。

public class Demo3ArrayIndex {    /*        数组动态初始化:                初始化的时候, 手动指定数组长度, 系统会为数组容器分配初始值.        数组的元素访问格式:                数组名[索引]                索引: 数组中数据的编号方式, 编号从0开始                作用: 访问数组容器中的空间位置        注意:                数组在创建完毕后, 即使没有赋值, 也可以取出, 但取出的元素都是默认初始化值.     */    public static void main(String[] args) {        int[] arr = new int[3];         // 0 1 2        System.out.println(arr);        // 数组的内存地址  [I@10f87f48        // 数组名[索引]  访问数组容器中的空间位置        System.out.println(arr[0]);     // 0  系统自动分配的默认初始化值        System.out.println(arr[1]);        System.out.println(arr[2]);        System.out.println("--------------");        // 数组名[索引]        arr[0] = 11;        arr[1] = 22;        arr[2] = 33;        System.out.println(arr[0]);        System.out.println(arr[1]);        System.out.println(arr[2]);    }}

Java中的内存分配

一个数组内存图

两个数组内存图

多个数组指向相同空间内存图

数组的静态初始化

在创建数组时,直接将元素确定,自动计算出数组长度。

public class Demo1Array {/*数组静态初始化 : 初始化时指定每个数组元素的初始值,由系统决定数组长度
​完整格式:数据类型[] 数组名 = new 数据类型[]{数据1,数据2,数据3...};简化格式:数据类型[] 数组名 = {数据1,数据2,数据3...};*/public static void main(String[] args) {// 数据类型[] 数组名 = new 数据类型[]{数据1,数据2,数据3...};int[] arr = new int[]{11,22,33};System.out.println(arr[0]);System.out.println(arr[1]);System.out.println(arr[2]);
​// 数据类型[] 数组名 = {数据1,数据2,数据3...};int[] arr2 = {44,55,66};System.out.println(arr2);System.out.println(arr2[0]);System.out.println(arr2[1]);System.out.println(arr2[2]);
​}
}

数组操作的两个常见问题

引越界异常
public class ArrayDemo {public static void main(String[] args) {
​        int[] arr = new int[3];System.out.println(arr[3]);}
}
数组长度为3,索引范围是0~2,但是我们却访问了一个3的索引。
程序运行后,将会抛出ArrayIndexOutOfBoundsException 数组越界异常。
空指针异常
public class ArrayDemo {public static void main(String[] args) {//1.创建了一个数组//arr记录一个地址值int[] arr = new int[3];
​//把null赋值给数组//修改了arr记录的地址值。表示arr不指向任何一个空间。arr = null;//通过arr获取数组里面的元素System.out.println(arr[0]);}
}
arr = null 这行代码,意味着变量arr将不会在保存数组的内存地址,
也就不允许再操作数组了,因此运行的时候会抛出 
NullPointerException 空指针异常。

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

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

相关文章

嫁接打印的技术要点

所谓嫁接打印,是一种增减材混合制造的方式。它将已成形的模具零件当作基座,在此基础上“生长”出打印的零件。其中基座通常采用传统加工方式制造,而打印部分则使用专用的金属粉末,通过 3D 打印技术成型。 嫁接打印之所以备受欢迎&…

安全 | 开源入侵防御系统 Snort

目录 Snort 概要 入侵预防系统模式 数据包记录器和嗅探器模式 网络安全学习路线 (2024最新整理) 学习资料的推荐 1.视频教程 2.SRC技术文档&PDF书籍 3.大厂面试题 特别声明: Snort 概要 Snort 概要 是世界上最重要的开源入…

Python语言基础学习(上)

目录 一、常量和表达式 二、变量和类型 2.1 认识变量 2.2 定义变量 2.3 变量类型 1、整数 int 2、浮点数(小数)float 3、字符串 str 4、布尔类型 2.4 类型转换 三、注释 3.1 单行注释 3.2 文档注释(或者多行注释) …

MySQL 通过 systemd 启动时 hang 住了……

mysqld:哥,我起不来了…… 作者:贲绍华,爱可生研发中心工程师,负责项目的需求与维护工作。其他身份:柯基铲屎官。 爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编…

谈基于ATTCK框架的攻击链溯源

引言 网络安全在当今数字化时代变得尤为关键,而MITRE公司开发的ATT&CK框架则成为了安全专业人员的重要工具。ATT&CK是一种广泛使用的攻击行为分类和描述框架。其目的在于提供一个共同的语言,使安全专业人员能够更好地理解攻击者的行为和目标&…

【NPM】Nginx Proxy Manager 一键申请 SSL 证书,自动续期,解决阿里云SSL免费证书每3个月失效问题

文章目录 1、NPM 简介2、实战Step 1:环境搭建 也可以看作者安装笔记 Step 2:创建容器 2.1 在系统任意位置创建一个文件夹,此文档以~/nginx-proxy-manager为例。2.2 创建docker-compose.yaml2.3 启动NPM服务 Step 3:配置反向代理3…

PyTorch 图像篇

计算机视觉技术是一门包括计算机科学与工程、神经生理学、物理学、信号处理、认知科学、应用数学与统计等多学科的综合性科学技术, 是人工智能的一个重要分支, 目前在智能安防、自动驾驶汽车、医疗保健、生成制造等领域具有重要的应用价值。 计算机视觉…

网络编程--tcp三次握手四次挥手

1、三次握手 (1)三次握手的详述 首先Client端发送连接请求报文,Server段接受连接后回复ACK报文,并为这次连接分配资源。Client端接收到ACK报文后也向Server段发生ACK报文,并分配资源,这样TCP连接就建立了。…

图片转图标(ICO)的工具软件

目前常用的ICO转换方式大多都是网页在线转换,没网就无法使用了。自己编写了一款小软件,可以将各种格式图片转为ICO图标。 目前支持PNG,BMP,JPG,JPEG,GIF等格式的图片转换成ICO,支持的尺寸有常用的16*16,24*24,32*32&am…

信息与未来2017真题笔记

T1. 龟兔赛跑 题目描述 兔子又来找乌龟赛跑啦!同样的错误兔子不会犯两次,所以兔子提出赛跑的时候,乌龟就觉得这场比赛很不公平。于是兔子进一步放宽了条件,表示他可以在比赛开始以后先睡 t t t 分钟再开始追乌龟。 乌龟这下没…

【mysql】主从同步时出错,如何恢复同步

mysql主从同步出错,这个时候从服务器会停止同步服务,等待人工恢复,此时有多种方法来解决。 一、查看状态 在从服务器,登陆mysql,查询从服务器的状态: 从服务器mysql> show slave status\G 图1 可以看…

jenkins持续集成框架

1 什么是jenkins Jenkins是一个开源的、提供友好操作界面的持续集成(CI)工具,起源于Hudson(Hudson是商用的),主要用于持续、自动的构建/测试软件项目、监控外部任务的运行(这个比较抽象,暂且写上&#xff0…