韩顺平Java-第六章:数组、排序、查找

一、数组

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”}

​这样的写法也可以//注意[]内不能有数字

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值