欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

数组的定义与使用总结

程序员文章站 2024-02-26 18:45:04
...

1.数组基本用法

1.1创建数组
有以下三种方法(此处用Int类型示例):

//动态初始化
int[] arr = new int[] {1,2,3,4,5};
int[] arr = new int[5];
//静态初始化
int[] arr = {1,2,3,4,5};

注意事项:静态初始化的时候,数组元素个数和初始化数据的格式是一致的。
1.2数组的使用

//获取数组长度
System.out.println("length:"+arr.length);
//访问数组元素
System.out.println(arr[0]);
//获取数组地址(哈希码)
System.out.println(arr);

注意事项:
下标访问操作不能超出有效范围[0,length-1],否则出现下标越界异常。“ArrayIndexOutOfBoundsException”即下标越界异常。
遍历数组(两种):
①使用for循环
②使用for-each,for-each代码如下:

int[] arr = {1,2,3};
for(int x:arr){
System.out.println(x);
}

③将数组快速打印出来:

System.out.println(Arrays.toString(arr);

上述①②两种方法区别:for-each不能使用下标。

2.数组作为方法的参数

2.1引用类型
①参数传内置类型``

int num = 0;
func(num);

②参数传数组类型

int[] arr = {1,2,3};
func(arr);

注意: 参数传内置类型时,修改形参的值,不影响实参num。而参数传数组内容时,在函数内部修改数组内容,函数外部也发生改变。
JVM内存区域划分
主要划分为以下几大部分:
①程序计数器:只是一个很小的空间,保存下一条执行的指令的地址。
②虚拟机栈:重点存储局部变量表,例int [ ] arr这样的存储地址的引用。
③本地方法栈:与虚拟机栈类似,只不过保存的内容是Native方法的局部变量。
④堆:JVM所管理的最大内存区域,使用new创建的对象都是在堆上保存。
⑤方法区:用于存储已被虚拟机加载的类信息,常量,静态变量,即时编译器编译后的代码等数据。方法编译出的字节码就是保存在这个区域。
⑥运行时常量池:是方法区的一部分,存放字面量与符号引用。
重点理解虚拟机栈和堆,如下图:
数组的定义与使用总结
即:局部变量和引用保存在栈上,new出的对象保存在堆上。

3.数组的拷贝

  • 用for循环
  • arraycopy方法 使用时System.arraycopy() 无返回
  • copyOf方法 使用时int[] newarr = Array.copyOf() 有返回
    以上②③两者区别:1)返回值 2)调用System Array不同 3)速度问题:System.arraycopy()更快
  • array.clone即数组名.clone 数组名为你要拷贝的数组名
    以上四种方式:
    对于数组中是简单类型就是深拷贝 数组中是引用类型就是浅拷贝
    浅拷贝:把1拷贝到2中,改变2则1也改变 即修改源数组不会影响到新数组
    深拷贝: 把1拷贝到2中,改变2则1不改变 即修改源数组会影响到新数组

4.二维数组

4.1基本用法(int类型为例)

int [][] array = new int [][] {{1,2,3},{4,5,6}};
int [][] array = {{1,2,3},{4,5,6}};
int [][] array = {{1,2},{3,4,5}};

数组的定义与使用总结
二维数组本质上:就是一维数组,只不过每个元素又是一个一维数组。