数组概述
- 同类型的数据的有序集合
- 同类型的若干个数据,按照一定的先后次序排列组合
- 每一个元素称为数组元素,数组元素可以通过一个下标来访问
数组声明创建
-
声明方式
// 声明数组 int[] nums;// 建议使用 int nums1[]; // 创建数组 int[] nums = new int[5];// 可以存放5个int类型的数字 // 获取数组长度 nums.length; // 数组下标 从 0 开始
数组状态初始化
-
静态初始化:创建+赋值
int[] a = {1, 2, 3, 4, 5};
-
动态初始化:包含默认初始化
int[] a = new int[10]; a[0] = 1; ...
-
数组的默认初始化
数组是引用类型,一经分配空间,其中每个元素也被按照实例变量同样的方式被 隐士初始化。
数组的基本特点
-
数组的长度是确定的。数组一旦被创建其长度是不可变的
-
数组的元素必须是同一类型的
-
数组的元素可以为任意数据类型。既可以是基本类型,亦可以是引用类型
-
数组变量属于引用类型,数组也可以看成是对象,数组中的每个元素相当于该对象的成员变量
数组本身就是对象,Java对象存储在 堆 中
数组的边界
- 下标的合法区间:[0, length - 1]
数组使用
- 普通for循环
- for-each 循环
- 数组作方法入参
- 数组做返回
public class Array01 {
public static void main(String[] args) {
// 静态初始化数组
int[] arrays = {1, 2, 3, 4, 5};
// 打印所有元素
for (int i = 0; i < arrays.length; i++) {
System.out.println(arrays[i]);
}
// 求和
int sum = 0;
for (int i = 0; i < arrays.length; i++) {
sum += arrays[i];
}
System.out.println(sum);
// 打印最大元素
int larger = 0;
for (int i = 0; i < arrays.length; i++) {
if(arrays[i]>larger){
larger = arrays[i];
}
}
System.out.println(larger);
// for-each 循环(since : JDK1.5)
for (int array : arrays) {
}
// 反转数组
int[] reverseArrays = new int[arrays.length];
for (int i = arrays.length-1; i >=0; i--) {
reverseArrays[i] = arrays[i];
System.out.print(reverseArrays[i]);
}
}
}
多维数组
-
多维数组可看成数组的数组,其每一个元素都是一个一维数组
-
二维数组定义
int arrays[][] = new int[*][*];
Arrays 类
- java.utils.Arrays 的使用
排序算法
冒泡算法
-
总共八大排序。冒泡排序,两层循环,外层冒泡轮数,里层依次比较
-
时间负责度: O(n2)
public static void main(String[] args) { /* 冒泡排序:核心就是比较数组中两个相邻的元素,如果第一个数比第二个数大,就交换位置, 每一次比较都会出现一个最大或最小的数 依次循环至结束 */ int[] arrays = {1, 9, 2, 10, 7, 6, 8}; // 外层循环 int temp = 0; for (int i = 0; i < arrays.length-1; i++) { // 内层循环,如果第一个数比第二个大 就交换位置 for (int j = 0; j < arrays.length-1-i; j++) { if(arrays[j+1] < arrays[j]){ temp = arrays[j]; arrays[j] = arrays[j+1]; arrays[j+1] = temp; } } } System.out.println(Arrays.toString(arrays)); }
稀疏数组
- 当一个数组中大部分元素为0,或者为同一值得数值时,可以使用稀疏数组保存
- 稀疏数组的保存方式
- 记录数组一共几行几列,有多少个不同值
- 把不同值的元素记录和行列记录在小规模数组中,以缩小程序的规模