数组
数组用于存储相同类型的一组数据,它是一种数据结构,也是Java中的一种类型。
- 一个数组有多个数据(元素)
- 一个数组里面的元素都是相同类型
- 数组中的元素用序号(下标,从0开始)来访问
- 数组一旦初始化后,长度不能改变
定义数组
数组定义跟变量定义类似,就是在变量类型后面加一对方括号
- 只定义数组,没有分配内存空间
- 没有长度
(注意: 数组可以按这样的方式定义,但是不推荐 int arrXxx[] )
//数组定义跟变量定义类似,就是在变量类型后面加一对方括号
int[] arrInt;
char[] arrChar;
boolean[] arrBoolean;
String[] arrStr;
初始化数组
指定长度,分配内存空间,每个元素给初始化的值
- new 类型[长度]
- new 类型[]{ }
- 类型[] 数组变量 = { }
如果数组初始化时没有赋值,按下面的规则给数组元素赋默认值:
数据类型 | 默认值 |
---|---|
byte, short, int ,long | 0 |
float, double | 0.0 |
char | ‘\u0000’ 不可见字符 |
boolean | false |
引用类型(类, 接口, 数组) | null |
// 数组的初始化
arrInt = new int[5]; //int类型数组默认初始值是0
arrChar = new char[]{'a', 'b', 'c'}; //初始化的同时赋值,
String[] arrStr2 = {"Tom", "Jack"}; //在数组定义时,直接用大括号赋值和初始化
float[] arrFloat = {3.14F, 2.56F, 4.22F};
使用数组
用数组变量名加[], 中括号里面写上下标,就可以读写数组的元素。
- 下标不能越界,否则要报(抛出)异常
- 数组长度可以通过length属性获得
// 数组使用
// 变量名[下标] 这样读取指定元素的值
System.out.println(arrInt[0]);
System.out.println(arrStr2[1]);
System.out.println(arrFloat[2]);
// 数组元素赋值
arrInt[0] = 888;
arrStr2[1] = "重新赋值";
arrFloat[2] = 8.88F;
System.out.println(arrInt[0]);
System.out.println(arrStr2[1]);
System.out.println(arrFloat[2]);
// 访问数组元素时,如果下标超出范围,抛出异常ArrayIndexOutOfBoundsException(数组下标越界异常)
arrInt[5] = 100;
// 数组变量有一个lenght的属性,就是数组长度
System.out.println(arrInt.length);
用循环遍历数组
- for循环
- foreach
for(类型 变量名 : 数组名){
//变量的值就是数组里元素
}
System.out.println("=========顺序遍历数组=======");
for (int i = 0; i < arrStr2.length; i++) {
System.out.println(arrStr2[i]);
}
System.out.println("=========倒序遍历数组=========");
for (int i = arrStr2.length - 1; i >= 0; i--) {
System.out.println(arrStr2[i]);
}
System.out.println("========遍历数组,给数组元素赋值=========");
for (int i = 0; i < arrInt.length; i++) {
arrInt[i] = i;
}
System.out.println(arrInt[3]);
System.out.println("========foreach循环遍历数组========");
// foreach, 增强的for循环
for(int i : arrInt){
System.out.println(i);
}
二维数组
int[][] arrInt1 = new int[5][3]; //初始化指定外层数组和内层数组的长度
int[][] arrInt2 = new int[5][]; //初始化只指定外层长度
//初始化的时候赋值,内层数组长度可以不一样
int[][] arrInt3 = new int[][]{{1,2}, {3,5,7}, {10, 20, 40, 50}};
//二维数组
int[][] arrInt = {{1, 2, 3},
{4, 5, 6},
{7, 8, 9}};
System.out.println(arrInt[0][1]);
System.out.println(arrInt[1][1]);
System.out.println(arrInt[2][0]);
// 用循环嵌套遍历二维数组
for (int i = 0; i < arrInt.length; i++) {
for (int j = 0; j < arrInt[i].length; j++) {
System.out.println(arrInt[i][j]);
}
}
Arrays类的使用
String[] arrStr = {"abc", "123", "456", "中文"};
// 在数组里搜索一个元素,搜到返回元素的下标;没有搜到返回负数
int i = Arrays.binarySearch(arrStr, "中文");
System.out.println(i);
// 复制一个新数组,第一个参数是原数组,第二个参数是新数组的长度
String[] arrNew = Arrays.copyOf(arrStr, 5);
System.out.println(arrNew.length);
System.out.println(arrNew[4]);
// 把数组转为字符串
System.out.println(Arrays.toString(arrStr));
// 对数组进行排序
Arrays.sort(arrStr);
System.out.println(Arrays.toString(arrStr));