数组
1.数组与变量
变量: 存储单个数据 例如:int a=39;
数组: 相同数据类型的有序集合,存储多个数据 [] 例如:int[] a=int[5]; 此时可以存储5个int类型的元素
因此变量多了可以存放在数组里
2.数组的特点:
1.数组是一个引用数据类型[]
2.数组是一个容器,长度一旦确定不可改变
3.数组中存放的数据数据类型要求相同
4.位置有序(下标|索引 都是从1开始,每次+1)
3.数组的声明:
数据类型 变量名(变量的声明)
int i=9;
//数据类型[] 数组名; ---数组的声明 --推荐
String[] arr1;
//数据类型 数组名[];
int a[];
//数据类型: 规定数组中存储数据的数据类型
arr1=new String[3];
可以为基本数据类型四类八种 可以为引用数据类型:类 接口 数组
4.数组的初始化:
//1.动态初始化(先创建后赋值)
String[] name;
name=new String[]{"wnag","ma","zi"};
//数据类型[] 数组名 = new 数据类型[长度];
String names = new String[2];
names[0] = "li";
names[1] = "si";
//默认值: (数组中的数据类型赋值,存在默认值)
//整数(int,long,short): 0
//小数(double,float): 0.0
//布尔(boolean)类型: false
//字符(char)类型:使用英文单引号既 ' '
char zifu='a';
//引用数据类型: null
//2.静态初始化(创建的同时赋值)
//数据类型[] 数组名 = new 数据类型[]{值1,值2,值3...};
char[] arr = new char[]{'a','b','c'};
//数据类型[] 数组名 = {值1,值2,值3...};
int[] number={23,21,44};
5.操作数组中的数据:
//根据索引操作 数组名[索引] 索引:0~length-1 String[] name; name = String[]{"zhang","san","and","li"}; System.out.println(name[1]);//输出索引下标为1的元素,为san //数组属性:数组名.length System.out.println(name.length);//打印数组名为name的数组长度
6.数组的遍历(把数据按照一定规律获取)
普通for循环:for(条件初始化;条件判断;条件变化){条件作为数组的索引存在}
//定义一个数组,使用普通for循环遍历 int[] number = new int[]{1,4,6,7,8}; for(int i=0;i<number.length;i++){ System.out.println(number[i]); }
增强for循环|for..each
for(数据类型 变量名 : 数组名|容器名){
变量指代数组中的每一个数据值(从前往后)
}
int[] numbers = {3,8,9,3,4};
//增强for循环遍历 for(int number:numbers){ System.out.println(number); }
7.使用数组时常见的异常
- NullPointerException 空指针异常:引用指向为null
- NegativeArraySizeException 数组长度负数异常:数组长度为负数了
- ArrayIndexOutOfBoundsException 数组索引越界异常:使用索引操作正常范围 0~length-1
二、二维数组
1.定义格式:
动态:
//第一种 int[][] arr01; arr01 = new int[2][];//这里的外层数组长度必须指定,内层的可有可无 arr01[0][] ={2,3,1,5}; arr01[1][] = {6,7,9};
静态
String[][] arr03={{"love","and"},{"share","piece"}};
//第二种
int[][] arr02 = new int[2][2]{{34,31},{35,33}};
2.二维数组的遍历
普通for嵌套普通for
//for循环嵌套for循环
int[][] arr= {{1,2,3},{4,5},{6}};
for(int i=0;i<arr.length;i++){
for(int j=0;j<arr[i].length;j++){
System.out.println(arr[i][j]);
}
}
int[][] arr= {{1,2,3},{4,5},{6}};
System.out.println("----------普通for嵌套增强for--------");
//i作为外层数组的索引
for(int i=0;i<arr.length;i++) {
//j代表内层小数组中的每一个数据
for(int j:arr[i]) {
System.out.println(j);
}
}
System.out.println("----------增强for嵌套增强for--------");
for(int[] a:arr) {
for(int i:a) {
System.out.println(i);
}
}
3.Arrays 工具类
操作数组的工具类,封装了很多常用来操作数组的方法,静态工厂
int[] number = {2,4,3,6,19,30,1,7};
int[] number1 = {2,4,3,6,19,30,1,7};
//拷贝 Arrays.copyOf(数组名,元素个数)
System.out.println(Arrays.toString(Arrays.copyOf(arr, 7)));; //拷贝
System.out.println(Arrays.toString(Arrays.copyOf(arr, 4)));; //截取
System.out.println(Arrays.toString(Arrays.copyOf(arr, 10)));; //填充
//Arrays.fill(arr, -1) 将数组arr全部填充为-1
System.out.println(Arrays.toString(arr));
//Arrays.fill(arr, 1,3,500);将数组arr从索引位置1到3全部填充为500
System.out.println(Arrays.toString(arr));
//Arrays.sort(数组名); 按照升序排序
Arrays.sort(arr); //默认升序
System.out.println(Arrays.toString(arr));
//二分法查找:Arrays.binarySearch(数组名,查找元素) 注意:二分法查找必须是先排序在查找
System.out.println(Arrays.binarySearch(arr, 9));
//比较两个数组元素的内容是否相等
System.out.println(Arrays.equals(number, number1));
//深层次比较,一般使用在二维数组中
System.out.println(Arrays.deepEquals(number, number1));

浙公网安备 33010602011771号