数组的详细总结

来源:互联网 发布:手机扫描条码软件 编辑:程序博客网 时间:2024/04/30 08:44

1.数组的分配 

特点:

1.1分配空间连续     2.空间不可扩充     3.空间的存储类型相同 

ps:初始化为0或null,Boolean默认false

2.数组的排序

Arrays.sort(a1);//util包中 

3.数组的扩充(重点了哦)==

3.1 第一种方法:直接破2333

  int a1={1,2,3}; 

  int a2[] = new int[a1.length * 2];
 for(int i=0;i<a1.length;i++){
 a3[i]=a1[i];
 }

  a1=a3;

3.2 第二种方法:调用System中的arraycopy()

System.arraycopy(a1,1, a2, 5, a1.length-2);//可以选择copy的起始点和长度
 a1=a3;

3.3 第三种方法:调用Arrays中的CopyOf():   从源码可知本质还是system.arraycopy(),但是方便了从首位copy数组的类型

int a4[] = Arrays.copyOf(a1, 4);
a1 = a4;


其实选择System中的arraycopy()还是Arrays中的CopyOf(): 主要看你的适用类型:

如果是直接从首位开始copy,那后者明显方便了不少,反之你对数组的copy有自己的要求前者更佳

当然 你想要第一种直接破也不是不可以2333


小结:归根究底,数组的扩充就是

1.重新分配一个空间更大的数组,

2.将老数组的内容复制过去

3.将老数组指向新数组的地址

这里你需要了解一点:就是数组的存储空间在堆,然而它的识别变量却在栈里(存储堆对象的地址)

例子:

int test[]=new int[]{1,2,3};//test存储在栈里(堆对象的地址){1,2,3}在堆空间


4.二维数组

其实就是一维数组中存储的不是其他类型变量而是数组,以此类推就是三维、四维数组了呗(冷漠脸)


最后国际惯例,附上我的练习代码君:

package com.jacob.javase;


import java.util.Arrays;


/*
 * 数组的详细探讨:
 */
public class ArrayTest {


public static void main(String[] args) {
// 1.数组的分配 特点:1.分配空间连续 2.空间不可扩充 3.空间的存储类型相同 ps:初始化为0或null/
// int a[] = new int[10];
// 2.不同的声明方式:
int a1[] = new int[] { 1, 2, 3 };
// int a2[] = { 2, 3, 4 };
// 思考a1[0]为多少
int b[] = a1;
b[0] = 666;
// 3.数组的排序
Arrays.sort(a1);
// 4.数组的扩充:1.创建一个新数组2.将老数组复制过去3.将老数组指向新数组地址
// 4.1 第一种方法:
int a3[] = new int[a1.length * 2];
// for(int i=0;i<a1.length;i++){
// a3[i]=a1[i];
// }
// a1=a3;
// 4.2 第二种方法:明确了起始位置和复制的长度
// System.arraycopy(a1,1, a3, 5, a1.length-2);
// a1=a3;
// 4.3 第三种方法:直接从首位开始复制(本质还是system.arraycopy())
int a4[] = Arrays.copyOf(a1, 4);
a1 = a4;
// 5.二维及多维数组
// 二维数组的长度
boolean t[][] = { {}, { true } };// 数组已经分配了地址空间,第一个地址空间中没存东西;第二个中存的是true
// 这种命名就相当于 不给初始化的一维数组(所以为null):debug可以清晰的看出来;
boolean t1[][] = new boolean[2][];
boolean t2[] = new boolean[2];
t1[0] = new boolean[3];
t1[1] = new boolean[2];
// System.out.println(t.length + "," + t[0].length + "," + t[1].length);
// System.out.println(t1.length + "," + t1[0] + "," + t1[1]);
// System.out.println(t2.length + "," + t2[0] + "," + t2[1]);
// print1(a1);
print2(t1);
}


// 封装遍历一维数组
public static void print1(int a[]) {
for (int i = 0; i < a.length; i++) {
System.out.print(a[i] + "\t");
}
}


// 封装遍历二维数组
public static void print2(boolean a[][]) {
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("");
}
}
}


最后:共同学习,一起进步 >,<






1 0
原创粉丝点击