数组的定义
- 数组是相同类型数据的有序集合。
数组的声明创建
1 | //声明一个数组 |
- 获取数组长度:arrays.length。
1 | //计算所有元素的和 |
内存分析
三种初始化
静态初始化
1
int[] a = {1,2,3,4,5,6,7,8,};//一旦定义不可改变
动态初始化(包含默认初始化)
1
2
3
4int[] nums = new int[10];
nums[0] = 1;
nums[1] = 2;
nums[2] = 3;
- 数组的默认初始化
数组的四个基本特点
长度确定。数组一旦被创建,它的大小就不可以改变。
元素必须是相同类型,不允许出现混合类型。
数组中的元素可以是任意数据类型,包括基本类型和引用类型。
数组本身就是对象,可以无限套娃。
数组对象本身是在堆中
。
数组边界
- 下标的合法区间:
[0,length-1]
,如果越界就会报错。
数组的使用
1 | public static void main(String[] args) { |
For-Each循环
1 | for (int array: arrays) { |
数组作为方法入参
1 | //定义一个方法,打印数组元素 |
数组作返回值
1 | //定义一个方法,反转数组 |
1 | public class Demo03 { |
多维数组
一般我们这样定义一个数组:
1
int[][] array = {{1,2},{2,4},{3,4},{4,5}};
int a[][] = new int[2][5];
以上二维数组a可以看成一个两行五列数组。
使用
1 | public static void main(String[] args) { |
Arrays类
import java.util.Arrays;
1 | import java.util.Arrays; |
具有以下常用功能:
给数组赋值:通过fill方法。
对数组排序:通过sort方法,按升序。
比较数组:通过equals方法比较数组中元素值是否相等。
查找数组元素:通过binarySearch方法能对排序好的数组进行二分查找法操作。
冒泡排序
比较数组中,两个相邻的元素,如果第一个数比第二个数大,我们就交换他们的位置。
每一次比较,都会产出一个最大,或者最小的数字。
下一轮则可以少一次排序。
依次循环,直到结束。
1 | import java.util.Arrays; |
时间复杂度优化
- 通过定义一个布尔值,在外层循环下,默认为
false
,在内层循环内,将布尔值重改为true
,然后每当内层循环结束后判断布尔值是否为false
,如果为false
,表明排序已完成,直接跳出外层循环。
1 | import java.util.Arrays; |
稀疏数组
二维数组中如果很多值都是0或者同一数值时,意味着记录了很多没有意义的数据。采用稀疏数组是不错的选择。
稀疏数组的处理方式是:
记录数组一共有几行几列,有多少个不同值。
把具有不同值的元素和行列及值记录在一个小规模的数组中,从而缩小程序的规模。
原始数组
1 | public class Demo07 { |
稀疏数组
1 | package cool.ply.array; |
输出结果为: