这里写目录标题
1 数组
1.1 数组的基本概念
数组(Array),是多个相同类型数据按一定顺序排列 的集合,并使用一个名字命名,并通过编号的方式 对这些数据进行统一管理。
1.2 数组的特点
(1)数组是有序排列的。
(2)数组属于引用数据类型的变量。数组的元素,既可以是基本数据类型,也可以是引用数据类型
(3)创建数组对象会在内存中开辟一整块连续的空间
(4)数组的长度一旦确定,就不能修改。
1.3 数组的分类
(1)按维数分:一维数组、二维数组…
(2)按类型分:基本数据类型数组、引用数据类型数组
2 一维数组
2.1 一维度数组的使用
/**
* 功能:一维数组的使用(初始化、调用元素、遍历数组)
* @author wuzec
*
*/
public class ArrayTest {
public static void main(String[] args) {
//1.1 静态初始化:数组的初始化和数组元素的赋值操作同时进行
//1.2 动态初始化:数组的初始化和数组元素的赋值操作分开进行
int[] ids = new int[] {100,200,300};//静态初始化
String[] names = new String[3];//动态初始化
//2 调用数组中的元素
names[0] = "Tom";
names[1] = "Tony";
names[2] = "Jenny";
//3 遍历数组
for(int i=0; i<names.length; i++) {
System.out.println(names[i]);
}
}
}
2.2一维数组的默认初始化
数组元素是整型:0
数组元素是浮点型:0.0
数组元素是char型:0或’\u0000’,而非’0’
数组元素是boolean型:false
数组元素是引用数据类型:null
2.3 一维数组的内存解析
2.3.1 JVM内存的简化结构
在此对JVM中的内存的简化结构进行一个说明,如下图所示:
2.3.2 一维数组代码操作在内存中的过程
2.4 一维数组的小例子
package newpaceage;
import java.util.Scanner;
/**
* 功能:有关一维数组的小练习
* 从键盘读入学生成绩,找出最高分,
* 并输出学生成绩等级。
* 成绩>=最高分-10 等级为’A’
* 成绩>=最高分-20 等级为’B’
* 成绩>=最高分-30 等级为’C’
* 其余 等级为’D’
* @author wuzec
*
*/
public class ExArray {
public static void main(String[] args) {
//1.读取学生个数
Scanner scan =new Scanner(System.in);
System.out.print("请输入学生的数量:");
int num = scan.nextInt();//学生数量
int temp;
int[] arr = new int[num]; //成绩数组
//2.输入每个学生的成绩
for(int i = 0; i<arr.length; i++) {
arr[i] = scan.nextInt();
}
//3.得到最高成绩
int max = arr[0];
for(int i=0; i<arr.length; i++) {
if(arr[i] >= max) {
max = arr[i];
}
}
System.out.println("最高是"+ max);
//4.输出判断结果
char level;
for(int i=0; i<arr.length; i++){
if(arr[i] >= max - 10) {
level = 'A';
}
else if(arr[i] >= max - 20){
level = 'B';
}
else if(arr[i] >= max - 30){
level = 'C';
}
else {
level = 'D';
}
System.out.println("student " + i + " score " + arr[i] + " grade is " + level);
}
}
}
3 多维数组
在此以二维数组为例,对多维数组进行介绍。
3.1 二维数组的理解
我们可以看成是一维数组 array1又作为另一个一维数组array2的元素而存 在。其实,从数组底层的运行机制来看,其实没有多维数组。
3.2 二维数组的使用
/**
* 功能:二维数组的使用(初始化、调用数组元素、遍历二维数组)
* @author wuzec
*
*/
public class ArrayTest2 {
public static void main(String[] args) {
//1.二维数组的声明和初始化
int[][] arr1 = new int[][]{{1,2,3},{4,5},{6}}; //静态初始化
String[][] arr2 = new String[3][2]; //动态初始化1
String[][] arr3 = new String[3][]; //动态初始化2
//2.调用数组中的元素
System.out.println(arr1[1][0]);
System.out.println(arr2[1][1]); //null
arr3[0] = new String[4];//对动态初始化2赋值
System.out.println(arr3[0][1]);//null
//3.获取数组长度
System.out.println(arr1.length);//3
System.out.println(arr2.length);//3
System.out.println(arr3.length);//3
//4.遍历二维数组
for(int i=0; i<arr1.length; i++) {
for(int j=0; j<arr1[i].length; j++) {
System.out.print(arr1[i][j] + " ");
}
}
}
}
3.3 二维数组的默认初始化
针对于初始化方式一:比如:int[][] arr = new int[4][3];
外层元素的初始化值为:地址值
内层元素的初始化值为:与一维数组初始化情况相同
针对于初始化方式二:比如:int[][] arr = new int[4][];
外层元素的初始化值为:null
内层元素的初始化值为:不能调用,否则报错。
3.4 二维数组的内存解析
3.4 二维数组的小例子
使用二维数组打印一个杨辉三角
/**
* 功能:实现杨辉三角 解法一
* @author wuzec
*
*/
public class YanghuiTest {
public static void main(String[] args) {
//初始化数组
int[][] arr = new int[10][10];
arr[0][0] = 1;
arr[1][0] = 1;
arr[1][1] = 1;
//打印并给数组赋值
for(int i=0; i<arr.length; i++){
for(int j=0; j<i+1; j++){
//从第三行往下开始算
if(i >= 2) {
if(j==0 || j==i) {//当元素为第一个或最后一个直接赋1
arr[i][j] = 1;
}
else { //若不是则使用杨辉三角算法进行赋值
arr[i][j] = arr[i-1][j-1] + arr[i-1][j];
}
}
System.out.print(arr[i][j] + " ");
}
System.out.println();
}
}
}
/**
* 功能:实现杨辉三角 解法二
* @author wuzec
*
*/
public class YanghuiTest2 {
public static void main(String[] args) {
//1.声明并初始化二维数组
int[][] arr = new int[10][];
//2.给数组元素赋值
for(int i=0; i<arr.length; i++) {
arr[i] = new int[i+1];
//2.1给首末元素赋值
arr[i][0] = arr[i][i] = 1;
//2.2给每行非首末元素赋值
for(int j=1; j<arr[i].length - 1; j++) {
arr[i][j] = arr[i-1][j-1] + arr[i-1][j];
}
}
//3.遍历数组
for(int i=0; i<arr.length; i++) {
for(int j=0; j<arr[i].length; j++) {
System.out.print(arr[i][j] + " ");
}
System.out.println();
}
}
}
参考资料:
[1]尚硅谷宋康红java基础教程