tags :
- java基础
flag: blue
@toc
JavaDay07 数组
一、生活中的数组
图书馆
<<自控力>> 10本
K-110-01 ~ 10 统一的放到一个书架上
<<我在>>
人类基本的思想:
归纳总结
- 放在一起,同一个书架上
- 有一个统一的编号 K-110
- 每一本书又是一个特定的个体,末尾的编号不同, K-110-01 K-110-04
二、 开发中的问题
在代码中经常使用大量的相同数据类型的变量,如果按照定义变量的格式,需要重复很多次,而且变量名字会各式各样
- 过于臃肿,阅读下极差
- 变量使用很容易用错
思考的解决方式:
- 【数据类型相同】可以放到一起,类似于放到同一个书架上
- 给这些数据起一个统一的名字 【数组名】
- 通过不同的编号来区分不同的数据 【下标 index】
三、如何定义一个数组
数据类型 变量名 = 数据;
数据类型[] 数组名 = new 数据类型[元素个数];
例如:
int[] array = new int[10];
左边:
int: 数据类型,告诉我们这个数组的空间里面保存的数据是什么类型,这里要求数组里面保存的是int类型的数据
[]:
-
告诉我们这是一个数组类型
-
array数组名是一个【引用】数据类型
array: 数组名,操作数组要用到的名字,是一个标识符,要符合标识符规范
右边:
new: 关键字 “创建数组的关键字”
int: 数据类型,表示这个数组里面只能保存int类型的数组
[10]
: 表示数组的【元素格式】为10,能够保存10个int类型的数组
四、如何使用数组
数组的使用格式:
数组名[有效下标];
数组的有效下标是什么?
在计算机中,数组的有效下标是从0开始到 元素个数 - 1
例如:
int[] array = new int[10];
有效下标范围是: 0 ~ 9
数组的内存分析
地址 【掌握】
-
生活中地址:
例如:纬五路21号,是在某条路上的一个编号,而且是唯一的
通常地址会用到
快递单 外卖
代码中类比生活中地址和快递单的关系: -
程序中的地址:
内存的编号
4GB = 1024 * 1024 * 1024 * 4 byte
在计算机中能够操作的最小单元就是字节
计算机给内存按照【字节】为单位 从 “0” 字节开始到 内存的最大值,每一个字节有一个特定的编号,是从0开始到内存最大值0 ~ 4294967295 十进制的编号,但是通常地址不管是在任何的语言的当中都是使用 十六进制来表示的
0x0 ~ 0xFFFFFFFF 内存编号的范围 每一个编号就是对应的【地址】
而在开发中,保存【地址】的变量是一个特殊的变量,在Java中这一类变量称之为【引用类型】变量
null:内存中编号为0的内存首地址
这个空间是收到系统保护的,任何程序都不能对这个空间进行读取和写入操作,如果操作了null空间这个程序会被系统干掉
null 可以用来作为【引用】数据类型变量的初始值
int[] arr = null;
【建议】
1. 多画图
2. 多思考
3. 多使用
数组作为函数的参数
例如:
public static void getNumberFromStdin(int[] array)
public staitc void main(String[] args)
数组的CRUD操作
Read 查
-
int[] arr = {1, 3, 2, 4, 5, 6, 7, 8, 9, 10};
静态创建数组的方式
请告诉我元素值为2的下标是多少? -
用户输入10个数据,找出10个数据中最大值和所在下标
根据数组的特性,实际上获取到的是数组当中最大值所在下标 -
用户出入10个数据,找出最大值和所有的所在下标
Update 改
Create 增
int[] arr = {1, 3, 5, 7, 9, 11, 13, 15, 17, 0};
要求
1. 0是无效数据,只是占用一个位置
2. 添加的操作不能影响数组的顺序
增加
情况1:
20 放到17 之后
{1, 3, 5, 7, 9, 11, 13, 15, 17, 20};
情况2:
4 放到3 之后
{1, 3, 4, 5, 7, 9, 11, 13, 15, 17};
情况3:
-1 放到下标为0 的位置
{-1, 1, 3, 5, 7, 9, 11, 13, 15, 17};
Delete 删
int[] arr = {1, 3, 5, 7, 9, 11, 13, 15, 17, 19};
要求
1. 0是无效数据,只是占用一个位置
2. 添加的操作不能影响数组的顺序
删除
情况1:
19
{1, 3, 5, 7, 9, 11, 13, 15, 17, 0};
情况2:
11
{1, 3, 5, 7, 9, 13, 15, 17, 19, 0};