1. 数组的概念
- 数组就是可以存放一组相同 数据类型 数据** 的数据结构
- 数组是一种引用类型
2. 数组的声明/定义
- 就是在栈区分配一个数组的引用,不能指定数组的长度
//下面两种声明/定义都可行,在Java中提倡第一种,
// 第二种可能在C/C++中使用的比较多
int[] arr1 ;
int arr2[] ;
3. 数组的创建
- 就是在堆区中分配存储数据的内存空间,必须指定数组的长度
- 并且长度指定后 不能改变(数组长度一旦指定 不能改变)
int[] arr = new int[5];
等号左边:
int :数据类型
[] :代表数组,有几个[] 代表几个数组
arr : 数组名称,合法的标识符
等号右边:
new : 在内存中开辟空间,创建新的实体或者对象
int : 数据类型 (这里相当于构造器吧)
[]: 代表数组
5:数组的长度
//上面的代码做了两件事
//①使用 new int[5] 创建了一个数组
//②把新创建的数组的引用赋值给变量 arr
图解说明.png
4.
- 数组中存放的每一个数据,都称之为数组中的一个元素
- 数组中存放元素的总个数,称为数组的长度
- 可通过数组的length属性获取数组长度
int len = arr.length
- 未区分数组的元素,给数组中的每个元素取了个“编号”---数组的索引
- 可通过数组名和索引值 来找到数组中的每个元素(索引从0 开始)
5 . 数组的初始化
- 就是给数组中的元素赋初始值
- 如果数组创建完成后没有初始化,则每个元素都会有默认值
数组元素的数据类型 | 数组元素的默认值 |
---|---|
整数(byte,short,int,long) | 0 |
浮点型(float,double) | 0.0 |
布尔(boolean) | false |
字符(char) | '\u0000' |
引用类型(String,Student,…) | null |
- 说明:
char在内存中占的两个字节,是16个二进制。
u0000,每个0其实代表的是16进制中的0,那么4个0就是代表16个二进制位。 - 数组的初始化有2种方式:静态初始化和动态初始化
//静态初始化:在数组创建的同时直接指定数组中的元素值,这种方式,其实数组长度就确定了
int[] iArr = {1,2,3,5};
String[] strArr = {"abc","bcd","ccc"};
int[] arr = new int[]{2,33,44,555};
//动态初始化:先完成数组的声明和数组的创建,再通过数组的索引取到数组中的每个元素来赋值
int[] arr = new int[4];
for(int i=0 ; i<arr.length; i++) {
arr[i] = i+1;
}
-
内存分配
内存分配.png
6. 数组的遍历
//正序(顺序):从索引为0的元素开始,依次取出,直到索引为arr.length-1
for(int i=0;i<arr.length;i++) {
int m = arr[i];
System.out.println(m);
}
//倒序
for(int i = arr.length-1;i>=0;i--) {
int m = arr[i];
System.out.println(m);
}
//foreach遍历
for(Int m:arr) {
System.out,println(m);
}
7. 对象数组,以学生对象为栗
//学生对象,省略getter,setter
public class Student{
private String num;
private String name;
private String sex;
private int age;
}
//学生对象数组
Sutdent[] stus = new Sutdent[3];
stus[0] = new Student("10010","Jun","男",22);
Student s = stus[0];
System.out.println(stus[0].getName);
//对象数组的遍历
Student[] stus = {new Student("10011","Zar","男",18),new Student("10012"),"June","女",19}
for(int i = 0;i<stus.length;i++) {
Student s = stus[i];
System.out.println(s.getNum+"---"+s.getName+"---"+s.getSex()+"---"+s.getAge());
}
for(Student s : stus) {
System.out.println(s.getNum+"---"+s.getName+"---"+s.getSex()+"---"+s.getAge());
}
-
内存分配:
内存分配.png
8. 二维数组:数组的数组,数组中的每个元素都是一个数组
- 二维数组的声明
// 声明/定义
int[][] arr1;
String[][] arr2;
Student[][] arr3;
- 二维数组创建 :必须指定大数组的长度
int[][] arr = new int[5][];//没有指定小数组的长度,大数组中没有创建小数组
arr[0] = new int[3]; arr[1] = new int[4];//分别指定
-
内存分配
没有指定小数组的长度.png
int[][] a = new int[2][4];指定了大数组中小数组的长度,会同时完成小数组的创建
-
内存分配
长度都指定.png -
二维数组的初始化
//静态初始化
int[][] arr={{3,5,7},{2,9},{5,7,3,6}};
String[][] arr = {{“aaa”,”bbb”,”ccc”},{“haha”,”hehe”},{“jdb”,”wlj”,”hqz”}};
int[][] arr = new int[3][4];
for(int i = 0;i<arr.length;i++) {
for(int j = 0;j<arr[i].length;j++) {
a[j] = (int)(Math.random()*10)+1;
}
}
- 二维数组的遍历
for(int i = 0;i<arr.length;i++) {
for(int j = 0;j<arr[i].length;j++) {
System.out.println(a[j]);
}
}
for(int[] a : arr) {
for(int n:a) {
System.out.println(n);
}
System.out.println();
}
网友评论