数据结构:计算机存储、组织数据得方式
数组
数组:
声明规则:数组类型 数组名[]
数组类型[] 数组名
静态声明:
int[] arr1 = {1,2,3,4,5};
动态声明:
int[] arr2 = new int[10];
分配内存空间,不分配内存空间
遍历数组
遍历:把每一项都拿出来
数组的遍历是利用for循环和数组的下标实现的
for循环:
for (int i = 0; i < arr1.length; i++) {
System.out.println(arr1[i]);
}
增强for循环:
for (int every: arr1) {
System.out.println(every);
}
常见错误:
1)下标越界:报错ArrayIndexOutOfBoundsException
2)空指针:报错NullPointerException
3)传值与传址(重点)
传地址又叫传引用记住引用类型的都是传地址
public static void main(String[] args) {
// 传值和传址
int x=10;
System.out.println(x); //10
a(x);
System.out.println(x);// 10
int[] f={1,2,3,4,5};
System.out.println(f[0]);//1
b(f);
System.out.println(f[0]);//10
}
public static int a(int y){
y++;
System.out.println(y+10);//21
return y;
}
public static int[] b(int[] t){
t[0]=10;
return t;
}
二维数组
二维数组:
声明规则:数组类型 数组名[][]
数组类型[][] 数组名
静态声明:
int[][] a={{1,2,3,4},{1,2,3},{1,2}};
动态声明:
int[][] a = new int[5][];
int[][] b = new int[5][6];
分配了内存空间静态调用的时候
// int[][] c = new int[][6] 二维数组不能这么定义
二维数组遍历
for循环
int[][] a={{1,2,3,4},{1,2,3},{1,2}};
for (int i = 0; i < a.length; i++) {
for (int j = 0; j < a[i].length; j++) {
System.out.print(a[i][j]+" ");
}
System.out.println();
}
增强for循环
for (int[] eve:a) {
for (int every:eve) {
System.out.print(every+" ");
}
System.out.println();
}
数组的复制
System.arraycopy(a,1,b,1,3);
一个类方法而已不常用
排序
1)冒泡排序:相邻元素比较,如果第一个大于第二个元素,就交换
for (int i = 0; i < a.length-1; i++) {
for (int j = 0; j < a.length-1-i; j++) {
if(a[j] >a[j+1]){
int c=a[j];
a[j]=a[j+1];
a[j+1]=c;
}
}
}
for (int eve:a) {
System.out.println(eve);
}
2)选择排序:将第一个元素与后面比较,如果第一个大于第二个则交换位置,交换之后运行上面得步骤。
for (int i = 0; i < a.length-1; i++) {
int min=i;
for (int j = i+1; j <=a.length-1 ; j++) {
if(a[min] >a[j]){
min=j;
}
}
if(min!=i){
int c=a[min];
a[min]=a[i];
a[i]=c;
}
}
for (int eve:a) {
System.out.println(eve);
}
3)调用api排序
Arrays.sort(a);
for (int eve:a) {
System.out.println(eve);