什么是数组
数组是相同类型数据的有序集合
每一个数据称为数组元素,每个数组元素可以通过以一个下标来访问
声明和创建数组:
int [] numbers;
numbers = new int[10];
//int [] numbers = new int[10];
内存分析
- 在声名数组,此时将array压入栈空间里,堆中还未分配内存
- 在创建数组时,此时在堆中分配内存,其默认值是0
三种初始化
静态初始化:
int[] a = {1,2,3,4,5,6};
System.out.println(a[1]);
动态初始化:
int [] b = new int[];
b[0] = 10;
System.out.println(b[0]);
动态初始化里包含默认初始化,如果不给值时,则默认为0或NULL
数组特点
- 数组一旦被建立,它的大小就是不可以改变的
- 其元素必须是相同类型,不可以出现混合类型
- 数组的元素可以是任何数据类型,包括基本类型和引用类型
- 数组变量属引用类型,数组也可以看成是对象,数组中的每一个元素可以看成是该对象的成员变量。数组本身就是对象,Java中对象是在堆中的,因此数组无论是保存原始类型还是其他对象类型,数组本身是在堆中的
数组使用
- for-each 循环
int [] array ={1,2,3,4,5};
//没有下标,输出每一个元素
for (int i : array) {
System.out.println(i);
}
System.out.println("-----------");
//正常输出
for (int i = 0; i < array.length; i++) {
System.out.println(array[i]);
}
- 作为形参
public static void printArray(int[] arrays){
for (int i = 0; i < arrays.length; i++) {
System.out.print(arrays[i]+" ");
}
}
- 数组作为返回值
public static int[] reverse(int[] arrays){
int result[] = new int[arrays.length];
for (int i = 0,j = result.length-1; i < arrays.length ; i++,j--) {
result[j] = arrays[i];
}
return result;
}
多维数组
多维数组可以看成是数组的数组
二维数组
Arrays类
Arrays类中的方法都是用static修饰的静态方法,在使用的使用可以直接使用类名进行调用,而不使用对象进行调用
常用功能:
- 给数组赋值:通过 fill 方法
- 给数组排序:通过sort方法
- 比较数组:通过equals方法比较数组中元素值是否相等
- 查找数组元素:通过binarySearch方法能对排好序的数组进行二分查找法操作
冒泡排序
- 比较数组中两个相邻的元素,如果第一个数比第二个数大,就交换他们两个的位置
- 每一次比较,都能产生出一个最大或最小的数字
- 下一轮则可以少一次排序
- 依次循环,直到结束
稀疏数组
稀疏数组是一种数据结构
当一个数组中大部分元素为0,或者为同一值的数组时,可以使用稀疏数组来保存该数组
稀疏数组的处理方法:
- 记录数组一共有几行几列,有多少个不同值
- 把具有不同值的元素和行列及值记录在一个小规模的数组中,从而缩小程序的规模
左为原始数组,右为稀疏数组
排序算法:
- 冒泡排序
- 选择排序
- 插入排序
- 快速排序
- 归并排序
- 希尔排序
- 堆排序
- 基数排序