一、数组简介
1. 概念:一组连续的存储空间,存储多个相同类型的数据。
2. 特点:
a. 类型相同
b. 长度固定
3. 创建
a. 声明:
i. 数据类型【】 数组名
ii. 如:int【】 num;
String【】 strs;
byte【】bs;
b. 创建
i. 动态创建
1) 数组名 = new 数据类型【数组长度】;
2) 数组名 = new 数据类型【】{值1,值2,值3…};
ii. 静态创建
1) 数据类型【】 数组名 = {值1,值2值3…};
c. 内存划分
i. new:在堆内存中开辟一块运行空间
ii. 图
d. 数组的内存划分
e. 数组的存、取值
i. 取值:数据类型 变量名 = 数组名【下标】;
ii. 获取长度:数组名.length;
iii. 存改值:数组名【下标】 = 值;
4. 使用
a. 内存图
b. 细节
二、 数组遍历
1. 遍历数组
a. 第一种方式(foreach)
b. 第二种方式(for)
2. 异常
a. 空指针
b. 越界
c. 代码
d. 结果
3. 例:处理最值
寻找最值(max、min)
package cn.wf.array;
/**
*找寻最值
* @author xx
* @date
*/
public class BestValue {
public static void main(String[] args) {
int[] nums = {3,65,89,102,55,66};
int num = maxNum(nums);
System.out.println(num);
}
/**获取最值
* @return*/
public static int maxNum(int[] ns){
int maxNum = ns[0];
for (int i = 0;i<ns.length;i++){
if (ns[i]>maxNum){
maxNum = ns[i];
}else {
break
;
}
}
return maxNum;
}
}
三、数组排序
1、两数交换
2、排序
i. 选择排序:和每一个数比较
ii. 冒泡排序:将数组中的两两依次比较,将大的数交换到最后(右边),剩余数依次重复。
iii. 对比:选择排序比冒泡排序效率高一点
冒泡的第二种方式(推荐):
iv. 数组实现:arrays.sort
四、数组的应用
1. 数组拷贝、复制
a. Arrays.copy;
2. 数组的扩容
3. 二维数组
a. 声明
i. 数据类型[][] 数组名
b. 创建
i. 动态
1) 数组名 = new 数据类型【当前二维数组中一维数组的个数】【一维数组的元素】
Int[][] numbers = new int[3][3];
2) 数组名 = new 数组类型[][]{{1,2,3},{4,5,6},{7,8,9}};
ii. 静态
1) 数组类型[][] 数组名 = {{},{},{}};
iii. 例证
iv. 内存分配
v. 使用
1) 杨辉三角
a) 直角
public class YanghuiTriangle {
public static void main(String[] args) {
//定义了一个长度为10,高度为10的二维数组,数组中的值都为0;
int[][] arr=new int[10][10];
for(int i=0;i<arr.length; i++) {
//由于只是给杨辉三角内的位置赋值,所以是j<=i
for(int j=0;j<=i;j++) {
//根据规律,使用if else 赋值
if(j==0||j==i) {
arr[i][j]=1;
}else {
arr[i][j]=arr[i-1][j-1]+arr[i-1][j];
}
/*由于只是输出杨辉三角范围内的值,所以在内层循环就输出,这种方法不能全部赋值完之后再输出
"\t"的原因是10和小于10的数组的宽度不同,所以使用\t制表符能使数与数之间距离相等
*/
System.out.print(arr[i][j]+"\t");
}
System.out.println();
}
}
}
b) 等腰
public class YanghuiTriangle2 {
public static void main(String[] args) {
int rows = 10;
for (int i = 0; i < rows; i++) {
int number = 1;
// 打印空格字符串
System.out.format("%" + (rows - i) * 2 + "s", "");
for (int j = 0; j <= i; j++) {
System.out.format("%4d", number);
number = number * (i - j) / (j + 1);
}
System.out.println();
}
}
}
4. 稀疏数组