* 数据结构:计算机中保存和组织数据的一种方式,保存方式不同,操作效率也不同
*
* (1)连续存储,确定长度后不能修改,下标从0开始,有length属性保存个数
* (2)查询操作效率高,添加及删除操作效率低(因为需要不断地创建空间和移动数据)
* (3)Java中数组没有提供添加和删除操作,需要自己完成
*
* 数据类型[] 变量名 = {值, 值, 值...}
* 数据类型 变量名[] = {值, 值, 值...}
* 数据类型[] 变量名 = new 数据类型[]{值, 值, 值...}
//静态声明
int[] arr1 = {1, 2, 3, 4};
int arr2[] = {4, 5, 6, 7};
int[] arr3 = new int[] {7, 8, 9, 10};
* 数据类型[] 变量名 = new 数据类型[长度]
//动态声明
int[] arr4 = new int[10];
* 注:如果是动态声明,数组中保存的是对应的默认值
* 整形: 0 浮点型: 0.0 布尔型: false 字符型:\u0000 引用型:null
查询:数组[下标] 数组下标从0开始
//查询
System.out.println(array[2]);
修改:数组[下标] = 值
//更改
array[3] = 11;
System.out.println(array[3]);
遍历(最后一个元素下标是数组长度-1)
//遍历
for (int i = 0;i < array.length; i++) {
System.out.println(array[i]);
}
下标越界: java.lang.ArrayIndexOutOfBoundsException
* 当下标小于0或大于等于length时,会出现下标越界
当调用一个方法并且需要传入数组的时候
(1).传递的是已经创建好的数组
(2).传递字面量
public static void main(String[] args) {
int[] array = {2, 4, 5, 7, 9};
//传递创建好的数组
m1(array);
//传递字面量
m1(new int[] {1, 4, 6, 9});
}
public static void m1(int[] arr) {
for (int i = 0;i < arr.length; i++) {
System.out.println(arr[i]);
}
}
* 传值:指的是基本数据类型传递
* 传址:指的是引用数据类型的传递
public static void main(String[] args) {
//基本数据类型传递
int age = 10;
m1(age);
System.out.println("main: " + age);
//引用数据类型的传递
int[] ages = {12, 18, 23, 55, 60};
m2(ages);
System.out.println("main: " + ages[0]);
}
//传值,m1方法内age改变不影响main方法中的age
public static void m1(int age) {
age--;
System.out.println("m1: " + age);
}
//传址,m2方法中的ages[0]改变,影响数组对应的值的改变
public static void m2(int[] ages) {
ages[0] = 12;
System.out.println("m2: " + ages[0]);
}
public static void main(String[] args) {
//源数组
int[] src = {1, 2, 3, 4, 5, 6, 7};
//目标数组
int[] dest = {11, 12, 13, 14, 15, 16, 17};
//源数组起始位置
int srcIndex = 1;
//目标数组起始位置
int destIndex = 2;
//复制个数
int length = 3;
copy(src,srcIndex,dest,destIndex,length);
//调用Api
//System.arraycopy(src, srcIndex, dest, destIndex, length);
for (int i = 0;i < dest.length;i++) {
System.out.println(dest[i]);
}
}
//使用for循环复制
public static void copy(int[] src, int srcIndex, int[] dest
, int destIndex, int length) {
for(int i = 0; i < length; i++) {
dest[destIndex] = src[srcIndex];
srcIndex++;
destIndex++;
}
}
public static void main(String[] args) {
//源数组
int[] src = {1, 2, 3, 4, 5, 6, 7};
//目标数组
int[] dest = {11, 12, 13, 14, 15, 16, 17};
//源数组起始位置
int srcIndex = 2;
//目标数组起始位置
int destIndex = 2;
//复制个数
int length = 3;
int[] newDest = copy(src, srcIndex, dest, destIndex, length);
//遍历输出新数组
for(int i = 0;i < newDest.length;i++) {
System.out.println(newDest[i]);
}
}
public static int[] copy(int[] src, int srcIndex, int[] dest
, int destIndex, int length) {
//定义新数组,新数组长度 = 目标数组长度 + 插入个数
int[] newDest = new int[dest.length + length];
//1.把目标数组的0到起始位置的数据先放到新数组中
for(int i = 0;i <= destIndex; i++) {
newDest[i] = dest[i];
}
//2.把源数组中,起始位置到起始位置+length结束的值放到新数组中
//定义临时量index存储destIndex+1的位置
int index = destIndex + 1;
for(int i = srcIndex; i < srcIndex + length;i++) {
newDest[index] = src[i];
index++;
}
//3.把目标数组中剩余的值放到新数组中
for(int i = destIndex + 1; i < dest.length;i++) {
newDest[index] = dest[i];
index++;
}
return newDest;
}
* 静态二维数组
* 数据类型[][] 变量名 = {{值,值,值...}, {值,值,值...}, {值,值,值...}}
* 数据类型[][] 变量名 = new 数据类型[][]{{值,值,值...}, {值,值,值...}, {值,值,值...}}
//静态
int[][] arr1 = {{1,2,3},{3,4,5},{6,7,5},{8,7,9}};
int[][] arr2 = new int[][]{{1,2,3},{3,4,5},{6,7,5},{8,7,9}};
* 动态二维数组
* 数据类型[][] 变量名 = new 数据类型[5][6]
//动态
int[][] arr3 = new int[5][2];
* 查询:数组[下标][下标] 数组下标从0开始
第一个下标是查询二维数组中的哪个一维数组
第二个下标是查询一维数组中的第几个元素
public static void main(String[] args) {
//静态
int[][] arr1 = {{1,2,3},{3,4,5},{6,7,5},{8,7,9}};
//查询
//查询并打印二维数组中第一个一维数组的第二个元素
System.out.println(arr1[0][1]);
//查询二维数组中最后一个一维数组的最后一个元素
System.out.println(arr1[arr1.length - 1][arr1[arr1.length-1].length-1]);
}
* 修改:数组[下标][下标] = 值
public static void main(String[] args) {
int[][] arr2 = new int[][]{{1,2,3},{3,4,5},{6,7,5},{8,7,9}};
//修改
//将二维数组arr2中的第二个一维数组的第一个元素修改为12
arr2[1][0] = 12;
}
* 两层循环语句
public static void main(String[] args) {
int[][] arr1 = {{1,2,3},{3,4,5},{6,7,5},{8,7,9}};
//遍历
for(int i = 0; i < arr1.length; i++) {
for(int j = 0; j < arr1[i].length; j++) {
System.out.print(arr1[i][j] + " ");
}
System.out.println();
}
}
* 如:int[][] array = new int[5][];只初始化二维数组长度
public static void main(String[] args) {
//动态声明二维数组,并且使每一个一维数组的长度可以不同
int[][] array = new int[4][];
//需要单独初始化每一个一维数组
for(int i = 0; i < array.length; i++) {
array[i] = new int[i + 1];
}
//遍历
for(int i = 0; i < array.length; i++) {
for(int j = 0; j < array[i].length; j++) {
System.out.print(array[i][j] + " ");
}
System.out.println();
}
}
public static void main(String[] args) {
int a = 3;
int b = 5;
//1.中间变量(常用)
int temp = a;
a = b;
b = temp;
System.out.println("a = " + a + ";" + "b = " + b);
//2.加减法
a = 3;
b = 5;
a = a + b;
b = a - b;
a = a - b;
System.out.println("a = " + a + ";" + "b = " + b);
//3.位异或
a = 3;
b = 5;
a = a ^ b;
b = a ^ b;
a = a ^ b;
System.out.println("a = " + a + ";" + "b = " + b);
}