数组
1.数组的概念
数组是相同类型数据的集合。
其中,每一个数据称作一个数组元素,每个数组元素可以通过一个下标来访问他们。
2.数组的创建
数组的创建可分为静态初始化和动态初始化
静态初始化:在程序运行前就能确定数组的大小和数组中的初始数据
语法:
数据类型[] 数组名(变量名/对象名) = {元素1,元素2....};
或
数据类型[] 数组名(变量名/对象名) = new 数据类型[]{元素1,元素2....}
动态初始化:数组的大小或数组中数据在程序运行时才能决定
语法:
数据类型[] 数组名(变量名/对象名) = new 数据类型[数组长度];
或
数据类型[] 数组名(变量名/对象名);//先声明变量
数组名 = new 数据类型[length];//创建数组并赋值
//注:数组名 = {元素1,元素2....}; 不能这样写
注意:
- 数组下标(从0开始)超出数组长度,数组越界异常(运行时异常)
- 数组中每个元素都有默认值,默认值是该数据类型默认值
- 数组名称.length(属性):取得数组长度
3.关于数组使用上的例子
例题1
/**
* @标题: 章节5
* @项目名 例题1
* @项目描述: 创建一个int型数组并赋值,然后输出它每一个元素。
* @创建人 yaojiawen
* @创建时间 2021/4/1418:59
*/
public class LiTi1 {
public static void main(String[] args) {
int[] num = new int[3];
num[0] = 1;
num[2] = 2;
for (int i = 0; i < 3; i++) {
System.out.println(num[i]);
}
}
}
例题2
/**
* @标题: 章节5
* @项目名 例题2
* @项目描述: 创建一个数组int[] num={4,1,2},然后在其中找出最大的值并输出。
* @创建人 yaojiawen
* @创建时间 2021/4/1419:12
*/
public class LiTi2 {
public static void main(String[] args) {
int[] num = {4, 1, 2};
int max = num[0];
for (int i = 0; i < num.length; i++) {
if (num[i] > max) max = num[i];
}
System.out.println("最大值为:" + max);
}
}
4.关于数组操作的常用方法(Arrays)
是在java.util.*包下,需要导包。主要的功能是操作数组(元素)
toString(数组名称) 将数组元素转换成字符串进行操作
equals(数组1,数组2) 比较两个数组是否一相同
sort(数组名称) 对数组进行升序排序
5.常用的几个排序方法
冒泡排序
原理:将相邻的两个元素进行比较,最大的值放在右端。
过程:N个数字要排序完成,总共进行N-1趟排序,每i趟的排序次数为(N-i)次,所以可以用双重循环语句,外层控制循环多少趟,内层控制每一趟的循环次数。
import java.util.Arrays;
/**
* @标题: 章节5
* @项目名 例题3
* @项目描述: 对数组int[] num={4,1,6,3};用冒泡排序法进行升序排序。
* @创建人 yaojiawen
* @创建时间 2021/4/1419:39
*/
public class LiTi3 {
public static void main(String[] args) {
int[] num = {4, 1, 6, 3};
for (int a = 1; a < num.length; a++) {
for (int b = 0; b < num.length - a; b++) {
if (num[b] > num[b + 1]) {
int c = num[b];
num[b] = num[b + 1];
num[b + 1] = c;
}
}
}
System.out.println(Arrays.toString(num));
}
}
选择排序
原理:每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。
过程:
1.首先从原始数组中选择最小的1个数据,将其和位于第1个位置的数据交换。
2.接着从剩下的n-1个数据中选择次小的1个元素,将其和第2个位置的数据交换
3.然后,这样不断重复,直到最后两个数据完成交换。最后,便完成了对原始数组的从小到大的排序。
import java.util.Arrays;
/**
* @标题: 章节5
* @项目名 例题4
* @项目描述: 对数组int[] num={4,1,6,3};用选择排序法进行升序排序。
* @创建人 yaojiawen
* @创建时间 2021/4/1419:39
*/
public class LiTi4 {
public static void main(String[] args) {
int[] num = {4, 1, 6, 3};
for (int a = 0; a < num.length; a++) {
for (int b = a + 1; b < num.length; b++) {
if (num[a] > num[b]) {
int c = num[a];
num[a] = num[b];
num[b] = c;
}
}
}
System.out.println(Arrays.toString(num));
}
}
插入排序
原理:每一步将一个待排序的数据插入到前面已经排好序的有序序列中,直到插完所有元素为止。
过程:
1.确定插入排序的数,一般从第二个开始选择
2.从第二个数开始,拿出第二个数进行向前插入排序,一直到拿到最后一个数向前做插入排序
3.每次将选择作为插入的数与前面比较,如果小于则前面的数往后移动一位,否则插入到这个位置
import java.util.Arrays;
/**
* @标题: 章节5
* @项目名 例题5
* @项目描述: 对数组int[] num={4,1,6,3};用选择排序法进行升序排序。
* @创建人 yaojiawen
* @创建时间 2021/4/1513:44
*/
public class LiTi5 {
public static void main(String[] args) {
int[] num = {4, 1, 6, 3};
for (int a = 1; a < num.length; a++) {
int jiaoHuan = num[a];
int shuLie = a - 1;
while (shuLie >= 0 && num[shuLie] > jiaoHuan) {
num[shuLie + 1] = num[shuLie];
shuLie--;
}
num[shuLie + 1] = jiaoHuan;
}
System.out.println(Arrays.toString(num));
}
}
6.二维数组
二维数组的元素是一维数组。
二维数组的创建
1. 数据类型[][] 数组名 = new 数据类型[len1][len2];//初始化数组
len1: 二维数组的元素个数(有len1个一维数组)
len2: 限定一维数组的元素个数
2. 数据类型[][] 数组名 = new 数据类型[len1][];
len1: 二维数组的元素个数(有len1个一维数组)
3.数据类型[][] 数组名 = {{1},{1,2},{1,2,3}};
4.数据类型[][] 数组名 = new 数据类型[][]{{1},{1,2},{1,2,3}};
7.练习题
练习1
题目:连接两个数组,使其组成一个新的数组。
import java.util.Arrays;
/**
* @标题: 章节5
* @项目名 练习1
* @项目描述: 连接两个数组,使其组成一个新的数组
* @创建人 yaojiawen
* @创建时间 2021/4/519:35
*/
public class LianXi2 {
public static void main(String[] args) {
int[] num1 = {1, 2, 3};
int[] num2 = {4, 5, 6};
int len = num1.length + num2.length;
int[] zuHe = new int[len];
for (int a = 0; a < len; a++) {
if (a < num1.length) zuHe[a] = num1[a];
else zuHe[a] = num2[a - num1.length];
}
System.out.println(Arrays.toString(zuHe));
}
}
练习2
题目:把一个数组里面的值拼接成一个字符串。如int[] a={1,2,3};使得String b=[1,2,3];
/**
* @标题: 练习1
* @项目名 章节4
* @项目描述: 把一个数组里面的值拼接成一个字符串。如int[] a={1,2,3};使得String b=[1,2,3];
* 注:字符串连接可以用方法append()或字符串连接符 "+"
* @创建人 yaojiawen
* @创建时间 2021/3/3016:10
*/
public class LianXi1 {
public static void main(String[] args) {
int[] num = new int[3];
num[0] = 20;
num[1] = 30;
num[2] = 40;
String pinJei = "[";
for (int a = 0; ; a++) {
pinJei = pinJei + num[a];
if (a == num.length - 1) {
pinJei += "]";
break;
}
pinJei += ",";
}
System.out.println(Arrays.toString(num));
}
}
练习3
创建一个数组,这个数组中第一个和数组中最大的数交换位子,最小的和最后的数交换位置,其他元素位置不变。
import java.util.Arrays;
/**
* @标题: 章节5
* @项目名 练习3
* @项目描述: 创建一个数组,这个数组中第一个和数组中最大的数交换位子,最小的和最后的数交换位置,其他元素位置不变。
* @创建人 yaojiawen
* @创建时间 2021/4/1516:06
*/
public class LianXi3 {
public static void main(String[] args) {
int[] num = {4, 31, 48, 1, 3, 48, 4};
int a = 0, b = 0;
for (int i = 1; i < num.length; i++) {
if (num[a] < num[i]) a = i; //找出最大值的下标
if (num[b] > num[i]) b = i; //找出最小值的下标
}
int c = num[0]; //把第一个和最大值交换
num[0] = num[a];
num[a] = c;
c = num[num.length - 1]; //把最后一个和最小值交换
num[num.length - 1] = num[b];
num[b] = c;
System.out.println(Arrays.toString(num));
}
}