数组
一:作用
数组的作用是保存一组相同数据类型的数据。
二:声明数组
首先必须声明数组变量,才能在程序中使用数组。
数据类型[] 数组名 = 初值
dataType[] array; // 首选的方法
注意:这里的数据类型,指的是,数组中保存的数据的类型
栈内存特点
1.当函数执行完毕,系统会自动帮你释放
2.现进后出
堆内存特点
1.分配内存特点
2.有初始值,默认值为0
3.有垃圾回收机制
三:数组遍历
public class Array {
public static void main(String[] args) {
int[] array = {1, 2, 3, 5};
// 打印所有数组元素
for (int i = 0; i < array.length; i++) {
System.out.println(array[i] + " ");
}
// 计算所有元素的总和
int total = 0;
for (int i = 0; i < array.length; i++) {
total += array[i];
}
System.out.println("Total is " + total);
// 查找最大元素
int max = array[0];
for (int i = 1; i < array.length; i++) {
if (array[i] > max) max = array[i];
}
System.out.println("Max is " + max);
}
}
四:数组元素反转
public class fun {
public static void change(int[] array) {
int num = array.length / 2;
for (int i = 0; i < num; i++) {
int temp = array[i];
array[i] =array[array.length-i-1];
array[array.length-i-1] = temp;
}
}
public static void main(String[] args) {
int [] a = new int[] {1,2,3,4,5,6};
change(a);
System.out.println(Arrays.toString(a));
}
}
五:冒泡排序
核心思想:相邻两个数比较 换位
public class fun {
public static void main(String[] args) {
int[] array = { 3, 2, 5, 1 };
// 外循环控制一共比了多少趟
// 内循环控制一共比了多少次
for (int i = 0; i < array.length - 1; i++) {
for (int j = 0; j < array.length - 1 - i; j++) {
// 内循环-1 防止数组越界
// 循环一次 确定一个数 每次都少比一次
if (array[j] > array[j + 1]) {
int temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
}
}
}
}
}
六:选择排序
核心思想:选择一个数(选第一个数)和其他的数进行比较 交换
public class fun {
public static void main(String[] args) {
int[] array = new int[] {3,2,1,5};
for (int i = 0; i < array.length - 1; i++) {
for (int j = i+1; j < array.length; j++) {
// 用第0个数和剩下的每一个数比较;
if(array[i]>array[j]) {
int temp =array[i];
array[i] = array[j];
array[j]= temp;
}
}
}
System.out.println(Arrays.toString(array));
}
}
七: 折半查找(必须是有序的数组)
public class fun {
public static void main(String[] args) {
int[] array = {1,22,33,44,55,66};
//先声明能使用到的变量
int key = 1;
int min = 0;
int max = array.length - 1;
int mid = (min + max) / 2;
// 循环---明确知道循环的停止条件
while(array[mid] != key) {
// 判断key和中间角标值,来挪动最小角标或者最大角标
if(key > array[mid]) {
min = mid + 1;
}
if(key < array[mid]) {
max = mid - 1;
}
// 每次循环都要有折半的操作
mid = (min + max) / 2;
// 数组中没有这个数的时候
if(min > max) {
//没有这个数,使用-1表示
mid = -1;
break;
}
}
System.out.println("该值的坐标是:" + mid);
}
八:二维数组
保存多个相同类型的一维数组,几维数组就几个[];
数据类型[][] 数组名 = 初值
int a[][] = new int[2][3]; // 二维数组 a 可以看成一个两行三列的数组。