一、数组
1、数组介绍
数组可以存放多个同一类型的数据。数组也是一种数据类型,是引用类型。即,数组是一组数据。
(1)数组的定义
① 第一种 动态分配方式
语法:数据类型 数组名[ ] = new 数据类型[大小]
//或者 数据类型[ ] 数组名 = new 数据类型[大小]
例如:int a[ ] = new int[5] //创建了一个数组,名字a,存放了5个int型数据
② 第二种 动态分配方式
先声明数组:
语法:数组类型 数组名[ ];也可以 数组类型[ ] 数组名;
例如:int a[ ];或者 int a[ ];
再创建数组:
语法:数组名 = new 数组类型[大小];
例如:a = new int[10];
③ 第三种 静态初始化
初始化数组
语法: 数据类型 数组名[ ] = {元素值,元素值…}
例如:int a[ ] = {2,3,4,5,6,7}
(2)数组的引用
数组名[下标/索引/index]
注意:数组的下标从 0 开始
2、数组使用注意事项和细节
(1)数组是多个相同类型数据的组合,实现对这些数据的统一管理;
(2)数组中的元素可以是任何数据类型,包括基本类型和引用类型,但不能混用;
(3)数组创建后,如果没有赋值,有默认值,int(0),short(0),byte(0),long(0),float(0.0),double(0.0),char(\u0000),boolean(false),String(null);
(4)使用数组的步骤:①声明数组并开辟空间;②给数组各个元素赋值;③使用数组;
(5)数组的下标是从 0 开始的;
(6)数组下标必须是在指定范围内使用,否则报下标越界异常;
(7)数组属于引用类型,数组型数据是对象(object)。
3、数组的赋值机制
(1)基本数据类型赋值,这个值就是具体的数据,而且不会互相影响。
例如: int n1 = 2; int n2 = n1;
(2)数组在默认情况下是引用传递,赋的值是地址。
int[] array1 = {1,2,3};
int[] array2 = array1;
array2[0] = 10;
for(int i = 0,i <= array1.length,i++){
System.out.println(array[i]);
}
//输出结果为10,2,3
值(传递)拷贝和引用(传递)拷贝的区别:
二、排序
1、介绍
排序是将多个数据,依照指定的顺序进行排列的过程。
2、排序的分类
(1)内部排序
指将需要处理的所有数据都加载到内存存储器中进行排序。包括(交换式排序法、选择式排序法和插入式排序法)。
① 冒泡排序法
基本思想:通过对待排序序列从前向后(从下标较小的元素开始),依次比较相邻的元素的值,若发现逆序则交换,使值较大的元素逐渐从前移向后部。
特点:
a. 假设一共由num个元素;
b. 一共进行 num - 1 次排序(可以当作外层循环);
c. 每 1 轮循环可以确定一个数的位置;
d. 当进行比较时,如果前面的数大于后面的数,就交换;
e. 每轮比较在减少。
(2)外部排序
数据量过大,无法全部加载到内存中,需要借助外部存储进行排序,包括(合并排序法和直接合并排序法)
三、查找
1、顺序查找
2、二分查找
四、二维数组
1、形式
(1)动态初始化法一
类型[][] 数组名 = new 类型[大小][大小];
int[ ][ ] arr = int[2][2]
(2)动态初始化法二
先声明:类型 数组名[][];
再定义(开辟空间):数组名 = new 类型[大小][大小];
赋值(有默认值):比如int的默认值是0。
(3)动态初始化法三
先声明外层数组的长度,而不声明内层数组的长度。
//创建 二维数组,一个有3个一维数组,但是每一个一维数组还没有开数据空间
int[][] = new int[3][];
for(int i = 0;i < arr.length;i++){ //遍历arr每一个一维数组
// 给每个一维数组开空间 new
// 如果没有给一维数组 new, 那么 arr[i] 就是null
arr[i] = new int[i + 1];
//便利一维数组,并给一维数组的每个元素赋值
for(int j = 0;j < arr[j].length;j++){
arr[i][j] = i + 1;
}
}
//输出的结果为
//1
//2 2
//3 3 3
(4)静态初始化
定义:类型 数组名[][] = {{值1,值2…},{值1,值2…},{值1,值2…}…}
访问:固定方式即可。
2、关键概念
(1)二维数组的元素个数(长度)为arr.length,二维数组第i个数组元素的个数(长度)为arr[i].length;
(2)二维数组的每个元素是一维数组,所以如果需要得到每个一维数组的值,需要再次循环遍历;
(3)访问第(i+1)个一维数组的第j+1个值:arr[ i ][ j ]
3、使用细节和注意事项
(1)二维数组的声明方式:
int[][] y 或者 int[] y[] 或者 int y[][]
(2)二维数组实际上是由多个一维数组组成的,它的各个一维数组的长度可以相同,也可以不同。
知识点
1、杨辉三角
for(int i = 0;i < arr.length;i++){
arr[i] = new int[i + 1];
for (int j = 0;j < arr[i].length;j++) {
if (j == 0 || j ==arr[i].length - 1) {
arr[i][j] = 1;
}else{
arr[i][j] = arr[i - 1][j] + arr[i - 1][j - 1];
}
}
}
2、声明
int[] x,y[];
声明了一个为int类型的一维数组x,一个为int类型的二维数组y。
3、细节
String strs = new String[]{“a”,“b”,“c”}
这样的写法也可以//注意[]内不能有数字