一.数组
1.数组(容器)
保存一组相同数据类型的数据
声明数组格式:
数据类型[] 数组名 = 初值;
注意:这里的数据类型 指的是数组中保存的数据的类型
(1).数组声明方式一:
int[] array = new int[数组的长度];
数组在堆内存中开辟的是一块连续的内存空间
栈内存的特点:
1.当函数运行完毕 系统会自动帮你释放
2.先进后出
public static void main(String[] args){ //声明一个整型数组(可以保存5个int值) int[] array = new int[5]; //注意数组的长度一旦确定就不能更改了 //数组如何存取? //使用下标存取 下标从0开始 //new 表示 在堆内存中 开辟块内存空间 //array[下标] = 值; array[0] = 10; //ArrayIndexOutOfBoundsException 报错 //数组越界异常 //System.out.printIn(array[5]); //null 空 array = null; //NullPointException 空指针异常 //访问了一块不属于你的内存空间 array[0] = 10; }
(2).声明数组方式二(又给长度又给元素)
int[] array = new int[]{1,2,3,4};
//语法糖
int[] array = {1,2,3,4};//简便写法
//获取数组的长度 数组名.length
//凡是数组问题 肯定会使用遍历
//利用系统方法 将数组转化为字符串输出
//一般带s的类 都是该类的工具类
System.out.println(Arrays.toString(array));
2.数组练习
/*
* 1.根据角标查找对应的元素
* 2.根据元素查找对应的角标
*/
public class Demo03 {
//需求: 封装一个函数 传入数字1 返回 一 数字2 返回 二 .....
public static char findStringToIndex( int index) {
//声明一个数组
char[] charArray = {'一','二','三','四','五'};
//String[] strArray = {"一","二","三","四","五"};
return charArray[index - 1];
}
3.数组元素反转
1,3,5,7
如何交换两个数?
声明临时变量 int temp = 0;
a = b;
b = temp;
基本数据类型接受的参数 是一个值的传递
引用数据类型(数组)在接受参数的时候 是地址传递
二.冒泡排序
核心思想:相邻两个数比较 换位
public class Demo05 { public static void main(String[] args) { int[] array = {3,2,5,1}; int temp = 0; for (int i = 0; i < array.length - 1; i++) { //内循环-1 防止数组越界 //内循环-i 循环一次 确定一个数 每次都少比一次 for (int j = 0; j < array.length - 1 - i ; j++) { if (array[j] > array[j + 1]) { temp = array[j]; array[j] = array[j + 1]; array[j + 1] = temp; } } } System.out.println(Arrays.toString(array)); } }
三.选择排序
核心思想:选择一个数(选第一个数)和其他的数进行比较 交换
public class Demo06 { public static void main(String[] args) { int[] array = {5,2,1,3,6}; for (int i = 0; i < array.length - 1; i++) { int temp = 0; for (int j = i + 1; j < array.length; j++) { if (array[i] > array[j]) { temp = array[i]; array[i] = array[j]; array[j] = temp; } } } System.out.println(Arrays.toString(array)); } }
四.折半查找
前提:必须是有序的数组 查找该元素在数组中的位置
public class Demo07 {
public static void main(String[] args) {
int[] array = {11,22,33,44,55,66};
int key = 55;
int min = 0;
int max = array.length - 1;
int mid = (min + max)/2;
while (array[mid] != key) {
if (array[mid] > key) {
max = mid - 1;
}else if(array[mid] < key){
min = mid + 1;
}
//每次循环都要有折半的操作
mid = (min + max)/2;
//数组中没有key的时候
if (min > max) {
//没有这个数 用-1表示
mid = -1;
break;
}
}
System.out.println("key值的下标是" + mid);
}
}
五.二维数组
二维数组(容器)
保存多个类型的一维数组
声明方法:
数据类型[][] 数组名 = 初值;
public class Demo08 { public static void main(String[] args) { //声明一个二维数组 int[][] array = new int[2][3]; //声明一个二维数组 有两个一维数组 //每个一维数组中有三个元素 //长度为2 表示二维数组有两个元素 两个元素都是一维数组 即 二维数组的长度为有几个一维数组 //声明方式二 //1,11,111 / 2,22,222 int[][] array1 = 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(); } } }