8、数组排序和查找
一、数组
1、为什么需要数组?
- 为了解决大量同类型数据的存储和使用问题
- 为了模拟现实世界,更有效地管理和处理数据
2、数组的使用
(1)概念:为一组数据,用于存放多个数据类型的数据
(2)数组的初始化
-
动态初始化:
数据类型[] 数组名 = new 数据类型[大小];
-
静态初始化:
数据类型[] 数组名 = {元素1, 元素2,...,元素n};
(3)数组的引用:下标从0开始,表示第一个元素
数组名[下标]
(4)一维数组的要点
- 为n个变量分配连续的存储空间
- 所有变量数据类型必须想同(向下兼容——精度高的可以兼容精度低的)
- 所有变量所占的字节大小必须相等
(5)注意事项
- 数组创建后,若不初始化,有默认值
- 使用步骤:声明数组并分配内存——》赋值(初始化)——》使用
- 下标从0开始,第n个元素的下标为n-1,有效下标为0—(n-1)
- 数组属于引用类型,数组型数据是对象
(6)数组的赋值
- 基本数据类型的赋值为值拷贝,与地址无关
- 数组间的赋值为引用传递,赋的值为地址,称为引用传递
3、动态添加数组
import java.util.Scanner;
public class ArrayAdd {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int arr[] = {1, 2, 3};
char answer;
for ( ; ; ) {
System.out.println("是否为数组扩容?(y/n)");
answer = scanner.next().charAt(0);
if (answer == 'y') {
int arrNew[] = new int[arr.length + 1];
for (int i = 0; i < arr.length; ++i) {
arrNew[i] = arr[i];
}
System.out.println("请输入一个您要添加的数:");
arrNew[arrNew.length - 1] = scanner.nextInt();
arr = arrNew;
System.out.println("添加后,数组为:");
for (int i = 0; i < arrNew.length; ++i) {
System.out.print(arr[i] + "\t");
}
System.out.println();
} else {
break;
}
}
}
}
二、排序
将多个数据,按指定的顺序进行排序的过程
分类 | 概念 | 例子 |
---|---|---|
内部排序 | 将所有数据都加载到内部存储器中进行排序 | 交换式排序、选择式排序、插入式排序... |
外部排序 | 数据过大,无法全部加载至内存中 | 合并排序、直接排序 |
三、查找
1、顺序查找
依次查找、遍历
2、二分查找
四、二维数组
1、概念:每个元素本省就是一个数组的一维数组,就是二维数组
-
语法
类型[][] 数组名 = new 类型[大小][大小];
-
在JVM内存中的储存形式
2、二维数组的使用
初始化
- 动态初始化
类型[][] 数组名 = new 类型[大小][大小];
//或者先声明,再初始化
类型[][] 数组名;
数组名 = new 类型[大小][大小];
//不完全初始化,即有未知元素长度——二维中一维长度不确定
int[][] arr = new int[2][];//一维地址数据的数组分配空间
for (int i = 0; i < arr.length; i++) {
arr[i] = new int[i+1];//给二维数组中的一维数组元素分配空间,这里给一维数组分配空间可自由发挥
//再遍历赋值
}