一.数组
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();
}
}
}