Java 数组

目录

数组是什么

数组的静态初始化

数组的访问

数组的几个注意事项

数组的动态初始化

元素默认值规则

数组遍历

数组排序

数组使用常见问题


活动地址:CSDN21天学习挑战赛

数组是什么

数组就是用来存储一批同种类型数据的内存区域(可以理解成容器)。

数组的静态初始化

定义数组的时候直接给数组赋值。

// 完整格式
数据类型[] 数组名 = new 数据类型[]{元素1,元素2 ,元素3… };
double[] scores = new double[]{89.9, 99.5, 59.5, 88.0};
int[] ages = new int[]{12, 24, 36} // 后面以此为例

// 简化格式
数据类型[] 数组名 = { 元素1,元素2 ,元素3,… };
int[] ages = {12, 24, 36};

​注意:数组变量名中存储的是数组在内存中的地址,数组是引用类型。

数组的访问

// 格式
数组名称[索引]

// 取值
System.out.println(ages[0]); // 12
// 赋值
ages[2] = 100;
System.out.println(ages[2]); // 100

数组的长度属性:length

// 获取数组的长度(就是数组元素的个数)
System.out.println(ages.length); // 3

数组的最大索引可以怎么表示?

数组名. length – 1  (前提:元素个数大于0)

// 获取数组的最大索引(就是数组最后一个元素的下标)
// 前提:元素个数大于0
System.out.println(ages.length - 1); // 2

数组的几个注意事项

“数据类型[] 数组名”也可以写成 “数据类型 数组名[] ”。

int[] ages =...; 
int ages[] =...; 

double[] scores = ...;
double scores[] = ...;

什么类型的数组存放什么类型的数据,否则报错。

// 这个是错的
int[] arrs = new int[]{30, 40, "helloworld"};

数组一旦定义出来,程序执行的过程中,长度、类型就固定了。

数组的动态初始化

定义数组的时候只确定元素的类型和数组的长度,之后再存入具体数据。

数组的动态初始化格式

数据类型[] 数组名 = new 数据类型[长度];
int[] arr = new int[3];

// 后赋值
arr[0] = 10;
System.out.println(arr[0]); // 10

两种初始化的的使用场景总结、注意事项说明

动态初始化:只指定数组长度,后期赋值,适合开始知道数据的数量,但是不确定具体元素值的业务场景。

静态初始化:开始就存入元素值,适合一开始就能确定元素值的业务场景。

两种格式的写法是独立的,不可以混用。

元素默认值规则

数据类型明细默认值
基本类型byte、short、char、int、long0
float、double0.0
booleanFALSE
引用类型类、接口、数组、Stringnull

数组遍历

遍历:就是一个一个数据的访问。搜索、数据统计等等都需要用到遍历。

int[] ages = {20, 30, 40, 50};
for (int i = 0; i < ages.length; i++) {
    System.out.println(ages[i]);
}

数组遍历的应用

1)数组求和

// 这5个数据的数组
int[] money = {16, 26, 36, 6, 100};
// 定义一个变量,记录求和
int sum = 0;
// 遍历数组中的每个数据,然后在外面定义求和变量把他们累加起来。
for (int i = 0; i < money.length; i++) {
    // i = 0 1 2 3 4
    sum += money[i];
}
// 循环结束后输出求和
return sum;

2)数组求最值

// 把颜值数据拿到程序中去,用数组装起来。
int[] faceScores = {15, 9000, 10000, 20000, 9500, -5};
// 定义一个变量用于记录最大值,这个变量建议默认存储第一个元素值作为参照。
int max = faceScores[0];
// 遍历数组的元素,如果该元素大于变量存储的元素,则替换变量存储的值为该元素。
for (int i = 1; i < faceScores.length; i++) {
    if(faceScores[i] > max) {
        // 替换
        max = faceScores[i];
    }
}
// 循环结束后输出最大值
return max;

数组排序

就是对数组中的元素,进行升序(由小到大)或者降序(由大到小)的操作。

数组排序的方法

冒泡排序:每次从数组中找出最大值放在数组的后面去。从头开始两两比较,把较大的元素与较小的元素进行交换,每轮把当前最大的一个元素存入到数组当前的末尾。

实现冒泡排序的关键步骤分析:确定总共需要做几轮: 数组的长度-1.

每轮比较几次:次数规律: 数组的长度 - i

i(轮数)次数
13
22
31

当前位置大于后一个位置则交换数据 

选择排序

快速排序

插入排序

数组搜索相关的技术

二分搜索

分块查找

哈希表查找

数组使用常见问题

问题1:如果访问的元素位置超过最大索引,执行时会出现ArrayIndexOutOfBoundsException(数组索引越界异常)

int[] arr = new int[]{11, 22, 33};
System.out.println(arr[2]);
// System.out.println(arr[3]) // 出现异常
// 出现ArrayIndexOutOfBoundsException异常

问题2:如果数组变量中没有存储数组的地址,而是null, 在访问数组信息时会出现NullPointerException(空指针异常)

arr = null;
System.out.println(arr); // null
// System.out.println(arr.length) // 出现异常
// 出现NullPointerException异常

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值