一维数组
保存一组数据类型相同的数据
声明一个数组: 数据类型[ ] 数组名 = 初值
注意: 这里的数据类型指的是数组中保存数据的类型
声明方式一:
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(); }
.......
三维数组就是保存多个相同类型的二维数组