快速学会 Java 中的数组

安全开
• 阅读 758

快速学会 Java 中的数组

作者 | 白色蜗牛 

转载请联系授权(微信ID: 919201148)

本文大纲

快速学会 Java 中的数组

前言

上一章文章 帮你看清 Java 字符串的世界,我们学习了 Java 的一种引用类型——字符串,今天我们来学习另外一种引用类型——数组。

为什么需要数组

试想一个场景,Java 课老师要统计全班同学的期末平均成绩,如果用程序编写该怎么做呢?

最原始的做法就是,有几个学生定义几个整型变量,然后把分数赋值给这些变量,最后求和再除以学生数。假设有 6 个学生,就可以有以下程序:

/**
* @author 蜗牛
* @from 公众号:蜗牛互联网
*/
public class ArrayShow {
public static void main(String[] args) {
int student1 = 88;
int student2 = 89;
int student3 = 90;
int student4 = 93;
int student5 = 79;
int student6 = 85;
int sum = student1 + student2 + student3 + student4 + student5 + student6;
int average = sum / 6;
System.out.println(average);
}
}

你会发现这样的程序写起来很麻烦,而且不具有普适性,学生人数变成 7 个就得改代码。另外学生人数如果变多,比如 100 个,你去定义 100 个变量那可能要累死!

那有没有更好的方法呢?

就这个场景来看,学生的成绩都是整数类型,那分组统一处理是不是会比较好?求平均成绩本质上就是这个组内所有成绩求和再除以学生个数。

聪明的计算机先驱者也是基于类似思路想出一种数据结构,解决了这种问题。那就是数组

什么是数组

什么是数组?

数组是存储有限个相同类型数据的集合

通过这个定义描述,我们可以发现数组的三个特点。首先它是一个存储数据的结构,其次是存到它里面的数据类型都是相同的,最后它是一个数据集,可以往里边增加或者移除数据,但能容纳的数量是有限的。

那基于定义描述,数组就有这些关键信息:数组类型数组大小数组名

数组类型决定数组支持什么样的数据类型。

数组大小决定了数组最多能容纳几个数据。

数组名可用于数组的各种操作,也是我们之前提到过的变量的概念。

Java 怎么表示数组

那在 Java 中,怎么表示数组呢?格式如下:

`数组类型[] 数组名 = new 数组类型[数组大小]`

我们举个形象的例子,比如把上边提到的学生成绩放到一个数组里,示例如下:

int[] studentScoreArray = new int[6];
System.out.println("赋值前第一个元素值为:" + studentScoreArray[0]);
studentScoreArray[0] = 88;
studentScoreArray[1] = 89;
studentScoreArray[2] = 90;
studentScoreArray[3] = 93;
studentScoreArray[4] = 79;
studentScoreArray[5] = 85;
System.out.println("赋值后第一个元素值为:" + studentScoreArray[0]);

打印:

赋值前第一个元素值为:0
赋值后第一个元素值为:88

以上代码就完成了数组定义、取值和赋值的操作。

Java 数组的特点

观察代码我们发现,初始化一个新的数组是用 new 这个关键字,同时确定了数据类型和数组大小。代码示例中数据类型就是 int,数组大小就是 6。

数组一旦初始化完成,大小就不可改变。你可以理解成计算机为数组分配了连续的内存空间,这块空间相当于就固定了,通过数组名来进行访问。

快速学会 Java 中的数组

数组初始化会有缺省值,整型都是 0,浮点型都是 0.0,布尔型都是 false。当然你也可以在初始化的时候就指定值,比如这样 int[] initStudentScoreArray = new int[]{88, 89, 90, 93, 79, 85};,这样还有个好处,就是不用写数组大小,因为编译器会自动推算数组大小。其实还可以进一步简写为:int[] sampleStudentScoreArray = {88, 89, 90, 93, 79, 85};

数组元素的访问通过索引实现,索引从 0 开始,比如 6 个元素的数组,索引范围是 0~5。如果访问范围之外的索引,会抛数组越界异常

快速学会 Java 中的数组

数组元素是可以修改的,通过赋值语句,比如 studentScoreArray[0] = 88;

数组可通过 数组名.length 来获取数组的大小。

数组既然是引用类型,那么数组名修改指向就可以更新它的内容。以下代码你猜输出结果会是什么呢?

`package cn.java4u.codebase.array;`
`/**`
 `* @author 蜗牛`
 `* @from 公众号:蜗牛互联网`
 `*/`
`public class ArrayDemo {`
 `public static void main(String[] args) {`
 `int[] studentScoreArray = new int[]{88, 89, 90, 93, 79, 85};`
 `int[] otherArray = new int[]{3, 2, 1};`
 `System.out.println(studentScoreArray.length);`
 `studentScoreArray = otherArray;`
 `System.out.println(studentScoreArray.length);`
 `}`
`}`

没错,数组变量 studentScoreArray 在指向 otherArray 之前指向的数组后,studentScoreArray 代表的也就是 3 个元素的数组了。

快速学会 Java 中的数组

输出结果如下:

6
3

总结

本文介绍了程序设计语言中最为常用的一种数据结构——数组。通过一个常见场景引出了数组诞生的背景,接着介绍了数组的概念,然后讲解了在 Java 中数组的表示方式,最后结合示例分析了 Java 数组的特点。希望对你能够有所启发和帮助,记得点赞支持下蜗牛!


我是蜗牛,大厂程序员,专注技术原创和个人成长,正在互联网上摸爬滚打。欢迎关注我,和蜗牛一起成长,我们一起牛~下期见!

关注我,回复 1024 获取 Java 程序员必备学习资源!

点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
3年前
JDK15正式发布,新增功能预览!
!(https://oscimg.oschina.net/oscnet/6bd2a6635f22440998d62c58d1c4a7ad.jpg)作者|王磊来源|Java中文社群(ID:javacn666)转载请联系授权(微信ID:GG\_Stone)JDK15在2020年9月15号正式发布了,这次发布的主
Wesley13 Wesley13
3年前
Oracle 19c 之 RPM 包安装初体验(一)
!(https://oscimg.oschina.net/oscnet/73fd8642b7364f1de2863b0ceb5f35321b0.gif)作者|JiekeXu来源| JiekeXu之路(ID:JiekeXu\_IT)转载请联系授权| (微信ID:xxq1426321293)大家好,我是JiekeXu,
Wesley13 Wesley13
3年前
Oracle 12c 及以上版本补丁更新说明及下载方法
!(https://oscimg.oschina.net/oscnet/79a637bc6387dc87fd960f8d0f4fe67d8c6.gif)作者|JiekeXu来源| JiekeXu之路(ID:JiekeXu\_IT)转载请联系授权| (微信ID:xxq1426321293)大家好,我是JiekeXu,
Wesley13 Wesley13
3年前
JDK 竟然是这样实现栈的?
!(https://oscimg.oschina.net/oscnet/b2e60191f9d143e3a4899c717aa4cd2f.jpg)作者|王磊来源|Java中文社群(ID:javacn666)转载请联系授权(微信ID:GG\_Stone)前面的文章《动图演示:手撸堆栈的两种实现方法!》(https://w
Wesley13 Wesley13
3年前
Oracle 19c 之 RPM 包安装初体验 CDB(二)
!(https://oscimg.oschina.net/oscnet/594c4473f1ac3c736d43ffeaf778a1ee189.gif)作者|JiekeXu来源| JiekeXu之路(ID:JiekeXu\_IT)转载请联系授权| (微信ID:xxq1426321293)大家好,我是JiekeXu,
Wesley13 Wesley13
3年前
MySQL开源工具推荐,有了它我卸了珍藏多年Nactive!
!(https://oscimg.oschina.net/oscnet/6d37ed1e91ea4607a92fd8fda95dab9f.jpg)作者|王磊来源|Java中文社群(ID:javacn666)转载请联系授权(微信ID:GG\_Stone)最近无意间发现了一款开源免费的MySQL客户端管理工具,磊哥
Wesley13 Wesley13
3年前
URL 去重的 6 种方案!(附详细代码)
!(https://oscimg.oschina.net/oscnet/424625a47398436aab01436e33af14d0.png)作者|王磊来源|Java中文社群(ID:javacn666)转载请联系授权(微信ID:GG\_Stone)URL去重在我们日常工作中和面试中很常遇到,比如这些:!(ht
Stella981 Stella981
3年前
Socket粘包问题终极解决方案—Netty版(2W字)!
!(https://oscimg.oschina.net/oscnet/f7f8847276f74c4785a2bb44a2405092.png)作者|王磊来源|Java中文社群(ID:javacn666)转载请联系授权(微信ID:GG\_Stone)上一篇我们写了《Socket粘包问题的3种解决方案(https://
Wesley13 Wesley13
3年前
Java中的5大队列,你知道几个?
!(https://oscimg.oschina.net/oscnet/413dba940d7047ee828abcda51d24e4a.jpg)作者|王磊来源|Java中文社群(ID:javacn666)转载请联系授权(微信ID:GG\_Stone)本文已收录至https://github.com/vipstone
Wesley13 Wesley13
3年前
Oracle 11g SYSAUX 和 SYSTEM 表空间回收相关知识点
!(https://oscimg.oschina.net/oscnet/7154fd6b2058481695445a2a9697b616.gif)作者|JiekeXu来源| JiekeXu之路(ID:JiekeXu\_IT)转载请联系授权| (微信ID:xxq1426321293)大家好,我是JiekeXu
Wesley13 Wesley13
3年前
Oracle 11g 临时表空间管理
!(https://oscimg.oschina.net/oscnet/0b25083732234ac49faeeae768ad90f5.gif)作者|JiekeXu来源| JiekeXu之路(ID:JiekeXu\_IT)转载请联系授权| (微信ID:xxq1426321293)大家好,我是JiekeXu