学习目标
1、掌握一维数组的定义和基本使用
2、理解数组的内存结构原理
3、掌握二维数组的定义和基本使用
4、掌握数组的基本算法和实现
5、掌握数组工具类Arrays的使用
第1章 数组概述
1.1 数组介绍
现在假如要统计我们班的学生姓名情况,用前面所学的知识,我们可能需要先声明n多个个变量来分别记住每个学生的姓名,这样做会显得很麻烦,而且容易出错。因此我们可以使用容器进行操作。将所有的数据全部存储到一个容器中,统一操作。
因此,这就引出了一个容器的概念。
容器概念:
- **容器:**是将多个数据存储到一起,每个数据称为该容器的元素。
- **生活中的容器:**水杯,衣柜,教室
Java从容器的角度衍生出了针对数据存储的Java容器:数组。
数组介绍:
- 数组概念: 数组就是数据类型一致、数据长度固定的用来存储连续数据的容器。
1.2 数组的分类
前面介绍了,数组就是存放数据类型一致、长度固定的容器,而我们的数据类型又分为基本数据类型和引用数据类型。因此,数组中可以存放一些基本数据类型数据,比如int、long,也可以存放引用数据类型,比如String、类、甚至是数组本身。也就是说,数组里面甚至可以嵌套数组,因此Java数组可以分为一维数组、二维数组、。。。多为数组。
开发中,最常用的还是一维数组以及二维数组。二维数组顾名思义,就是在一维数组中的每一个元素类型又是一个数组(类似之前学习的嵌套for循环)。
第2章 一维数组的基本操作
2.1 一维数组的定义
数组的定义有三种方式。
1. 方式一
- 格式:
数据类型[] 数组名 = new 数据类型[长度];
- 数组定义格式详解:
- 数据类型: 创建的数组容器可以存储什么数据类型,所有数据类型都可以存储。
- [] : 表示数组。
- 数组名字:为定义的数组起个变量名,满足标识符规范,可以使用名字操作数组。
- new:关键字,创建数组使用的关键字。
- [长度]:数组的长度,表示数组容器中可以存储多少个元素。
- 注意:数组有定长特性,长度一旦指定,不可更改。
- 和水杯道理相同,买了一个2升的水杯,总容量就是2升,不能多也不能少。
- 举例:
定义可以存储6个整数的数组容器,代码如下:
int[] array = new int[6];
2.方式二
- 格式:
数据类型[] 数组名 = new 数据类型[]{元素1,元素2,元素3...};
- 举例:
定义存储1,2,3,4,5,6整数的数组容器。
int[] arr = new int[]{1,2,3,4,5,6};
3.方式三
- 格式:
数据类型[] 数组名 = {元素1,元素2,元素3...};
- 举例:
定义存储1,2,3,4,5,6整数的数组容器。
int[] arr = {1,2,3,4,5,6};
说明:
上面定义数组并初始化的时候,都是使用int[] arr这种形式,Java数组还支持int arr[] 这种形式的定义。
2.2 数组的基本操作
数组是存储一类元素的,有了数组就方便进行元素统一管理,下面介绍一下数组的基本操作。
2.2.1 数组相关概念说明
- 索引: 每一个存储到数组的元素,都会自动的拥有一个编号,从0开始,这个自动编号称为数组索引(index),可以通过数组的索引访问到数组中的元素。
- 格式:
数组名[索引]
- 数组的长度属性: 每个数组都具有长度,而且是固定的,Java中赋予了数组的一个属性,可以获取到数组的长度,语句为:
数组名.length
,属性length的执行结果是数组的长度,int类型结果。由次可以推断出,数组的最大索引值为数组名.length-1
。
2.2.2 数组基本操作
数组创建后,涉及到数组的对应位置元素的初始化、元素的修改、元素的获取。
public static void main(String[] args) {
// 定义一个定长数组
int[] array = new int[3];
// 1、元素赋值
array[0]=1;
array[1]=2;
array[2]=3;
// 2、元素修改
array[0]=11;
// 3、元素获取
int a=array[0];
// 打印数组,Arrays先了解即可
System.out.println(Arrays.toString(array));
}
**注意:**因为数组长度固定,因此数组本身无法添加或者移除元素,但是我们可以在原数组的基础上复制一份数组来改变其长度和元素。
2.2.3 数组初始化值介绍
在前面章节学习java变量的时候介绍过,定义的变量如果没有初始化赋值是不能使用的,否则编译报错。而今天学习的数组,内部可以存放各种数据类型,如果没有初始化赋值是否会报错呢?
public static void main(String[] args) {
// 定义一个定长数组
int[] array = new int[3];
System.out.println(array[0]); // 0
}
上面示例结果没有报错,且输出结果为0,测试发现没有初始化赋值的int类型数组每一个位置都有个默认值0。
所以,这里要强调的是数组作为一个引用数据类型,内部可以存放各种类型元素,如果没有进行初始化赋值,都会有一个默认初始化值。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-snnxBaLj-1632745926130)(imgs/image-20200609163431552.png)]
2.3 数组原理分析
2.3.1 内存概述
内存是计算机中的重要原件,临时存储区域,作用是运行程序。我们编写的程序是存放在硬盘中的,在硬盘中的程序是不会运行的,必须放进内存中才能运行,运行完毕后会清空内存。
Java虚拟机要运行程序,必须要对内存进行空间的分配和管理。
2.3.2 Java虚拟机的内存划分
为了提高运算效率,就对空间进行了不同区域的划分,因为每一片区域都有特定的处理数据方式和内存管理方式。
**官方文档地址:**https://docs.oracle.com/javase/specs/jvms/se8/html/index.html