1.数组:
是引用数据类型,用来保存多个数据
1.数据结构:计算机存储和组织数据的方式。指相互之间存在一种或多种特定关系的
数据元素的集合。
数据操作:增删改查
2.数组特性:
1.内存中连续存储,下标(偏移量)从0开始。(内存地址偏移)
2.长度一旦确定,不能更改。
3.数组有一个内置属性 length 保存了数组的长度。
4.插入、删除效率低,查询、更改效率高(偏移量)。
5.在java中 有一个java.util.Arrays 类 提供了一些数组操作。
3.数组声明:
1.静态声明:已知每一个元素的时候。
数据类型 变量名 = 值;
int i = 2;
int[] arr = {1,2,3};
int[][] arr = {{},{}};
注:[]可以写到变量名后面。 int arr[] = {1,2,4};
2.动态声明:不知道数组中每个元素的时候。
int[] arr = new int[5];
对数组进行二次赋值:int[] arr = new int[]{};
4.数组使用:
1.获取数据
System.out.println(arr[0]);
2.更改数据
arr[1] = 1;
3.遍历
for(){
System.out.println(arr[i]);
}
增强for循环 forcach
for(数据类型 变量名:数组){} eg:for(int element:arr){}
把数组中的每一个元素都赋值给变量。
4.常见异常
1.下标越界
数组下标超出表示范围。
2.空指针异常
数组没有进行初始化,但对数组进行了属性操作。
5.数组传递:
字面量传递方式:m2( new int[]{1,2,3});
mian方法传参:详剑笔记1.5.6
6.传值和传址(易错点):
传值:传递基本类型的数据。
传址(传引用):传递引用数据类型的值。
7.数组复制:
原数组,原数组起始位置(包含),目标数组,目标数组起始位置,复制个数。
没有重新生成数组,所以不需要返回值。
8.数组插入复制:
copy(int[] src,int srcPos,int[] dest,int destPos,int length){}
原数组,原数组起始位置,目标数组,目标数组起始位置,插入个数
9.一维数组存储:
2.二维数组
1.声明方式:
静态声明:同上。
动态声明:
int[][] arr = new int[3][4];
int[][] arr = new int[3][]; 表示有三个一维数组,数组内为null。
这种需要单独初始化每一个一维数组的长度,用于每行列不一样的情况,
2.存储方式:
int arr = {{},{}};
3.使用方式:
1.获取数据:
2.更改数据:
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();
}
*4.动态声明锯齿状:
二维表:int[][] arr = new int[5][6];
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();
}
锯齿状:
int[][] arr = new int[5][];
for(int i=0;i<arr.length;i++){
arr[i] = new int[i+1];
}
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();
}
3.交换变量的值
xy互换
1.中间变量
temp = x;
x = y;
y = temp;
2.位移运算(面试):
x=2,y=3;
//转换为对应的二进制,每位异或,相同取0,不同取1;
x=x^y;
y=x^y;
x=x^y;
3.加减运算
x=x+y;
y=x-y;
x=x-y;