一维数组
保存一组数据类型相同的数据
声明一个数组: 数据类型[ ] 数组名 = 初值
注意: 这里的数据类型指的是数组中保存数据的类型
声明方式一:
int[] array = new int[数组的长度];
注意: 数组的长度一旦确定 就不能更改
new 表示 堆内存中开辟的空间
数组在堆内存中 开辟的是一块连续的内存空间
main函数存储在栈内存中
栈内存中保存的是堆内存数组的首地址
如: int[] array = 0x00123
声明方式二:
给出数组长度和元素
int[] array = new int[]{1,3,5,10};
声明方式三:
语法糖 便捷写法
int[] array = {1,3,5,10};
栈内存特点:
1. 函数执行完毕 系统自动释放空间
2.先进后出原则
堆内存特点:
1. 分配内存地址
2.有初始值 基本数据类型初始值为0
3.有垃圾回收机制
当该内存无人使用时 成为垃圾 某一时刻被系统释放
数组的存取
使用下标存取,下标从0开始
存:
array[下标] = 值;
取值:
System.out.println(array[下标]);
取值时注意数组下标 防止打印报错---数组越界异常
若 array = null; 空指针异常
访问一块不属于你指向的内存空间
数组的遍历
打印数组中所有的元素
获取数组的长度 : 数组名.length;
凡是数组的问题,一般都会用得到遍历
for(int i = 0; i < array.length; i++){
Sysm.out.print(array[i] + " ");
}
常见有 通过具体数值查找该值在数组中的位置、查找数组中某一位置的元素
数组元素的反转(元素位置调换)
通过定义声明一个临时变量
int a = 10;
int b = 15;
int temp = a;
a = b;
b = temp;
封装函数交换数值时,基本数据类型接收参数是一个值的传递
引用数据类型(数组 接口 类)是地址之间的传递,可直接打印,不需要返回值
冒泡排序
核心思想: 相邻两个数作比较来换位
int[] array = (1,8,7,12);
/*
* 外循环控制一共比较多少趟
* 内循环控制一趟比较多少次
*/
for(int i = 0; i < array.length - 1; i++){
// 内循环 -1 防止数组越界
// 内循环 -i 确定一个数 每次都烧比较依次
for(int j = 0; j < length - 1 - i; j++){
// 判断相邻元素的大小
if(array[j] > array[j + 1]){
int temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
}
}
}
选择排序
核心思想: 选择第一个数和其后元素依次比较 交换
int[] array = {3,2,5,1,6};
// 5个数比4趟循环
for (int i = 0; i < array.length - 1; i++) {
for (int j = i + 1; j < array.length; j++) {
// 用第i个数 和剩下的每一个数比较
// 量化思维
// i = 0 j: 1,2,3
// i = 1 j: 2,3
// i = 2 j: 3
int temp = 0;
if (array[i] > array[j]) {
// 交换
temp = array[i];
array[i] = array[j];
array[j] = temp;
}
}
}
折半查找
前提: 必须是有序的数组
查找元素在数组中的位置
中间坐标 = (最大角标 + 最小角标) / 2;
int[] array = {1,22,33,44,55,66};
int key = 22;
// 先定义能使用到的变量
// 最大 最小 中间
int min = 0;
int max = array.length - 1;
int mid = (min + max)/2;
// 循环 --- 明确知道循环的停止条件
while(array[mid] != key) {
// 判断 key和中间角标的值
// 来挪动 最小角标或最大角标
if (array[mid] < key) {
min = mid + 1;
}else if(array[mid] > key){
max = mid - 1;
}
// 每次循环都要有折半操作
mid = (min + max) / 2;
// 数组中没有这个数的时候
if (min > max) {
// 没有这个数 使用-1表示
mid = -1;
break; // 跳出循环
}
}
System.out.println("该值的下标是:" + mid);
二维数组
保存多个相同类型的一维数组
数据类型[][] 数组名 = 初值;
声明一个二维数组:
int[ ][ ] array = new int[2][3];
这个二维数组中有两个一维数组,每个一维数组中有三个元素
声明方式二:
int[ ][ ] array = new int[][]{
{1,11,111},
{2,22,222}
};
遍历二维数组:
for (int i = 0; i < array1.length; i++) {
for (int j = 0; j < array1[i].length; j++) {
System.out.print(array1[i][j] + " ");
}
System.out.println();
}
.......
三维数组就是保存多个相同类型的二维数组