数组
一、数组概念
1、数组是用来存储一组相同 数据类型数据的数据结构。
2、数组也是一种引用类型
3、数组的元素可以是简单类型的数据(基本数据类型),也可以是引用类型的数据。
二、一维数组
1、一维数组定义
在数组定义中,不能指定数组的长度,而需要在创建阶段来指定。
定义方法有两种:
-
type[]arr_name;
-
type arr_name[];
例如:int[] a;float b [];
2、数组的创建
- 在声明数组时,不能指定数组的大小
- 通过new操作符来创建数组对象,指定数组的大小,给数组元素的存储分配空间
3、数组的初始化
- 在创建完数组后,可以对数组进行初始化。也就是给数组中的各个元素进行赋值。
- 有两种方式赋值:
- 静态初始化
- 动态初始化
//1.静态初始化
/**完成三步动作
数组变量的定义
数组对象的创建
数组对象的初始化
**/
int [] a = new int[10];
a[0] = 20;
/**2.动态初始化
就是将数组的定义和数组的初始化分开来进行
**/
int[]a;
a = new int [10];
for(int i = 0;i<10;i++){
a[i] = 2*i +1;
}
4、简单数据类型数组内存分析
- 简单数据类型数组的定义
在定义数组的时候,系统会给这个数组分配用于存放这个数组的内存空间。
以int类型为例,当定义一个整数类型数组
int【】arr;
- 简单数据类型数组的创建
在创建简单数据类型的数组的时候,系统会分配合适的空间用来存放该种数据类型数据的内存空间,并且将这个数组的各个元素赋一个和数组类型匹配的初值。
如 arr = new int[10];
- 初始化
对于简单数据类型的数组,当对其进行初始化时,会将对应的值赋给对应的各个数组元素。
5、引用数据类型数组内存分析
- 引用数据类型数组的定义
引用类型数组的定义和简单类型数组的定义没什么区别,也是在栈中开辟内存
如 String[]arr;
- 引用数据类型数组的创建
首先给数组元素分配内存空间,然后给这些数组元素一个默认的初始值null
如:arr = new String[10];
- 引用数据类型数组的初始化
和简单数据类型数组不同。因为数组本身是引用类型,而现在的数组元素也是引用类型,所以这个时候需要给数组元素所引用的对象也分配内存空间
6、数组元素的引用
- 通过数组名和数组索引来引用一个数组中的元素,数组的索引从0开始到数组长度-1结束。
- 可以使用数组的一个属性length来获得数组的长度
三、二维数组/多维数组
1、对数组排序
实际应用中,不用自己写算法来排序。Arrays类中有一个静态方法sort,可以用这个类的sort方法来对数组进行排序。是一种调优的快速排序。
2、数组拷贝
- 可以将一个数组变量拷贝给另一个数组变量,这个时候,这两个数组变量均指向相同的数组。
- 如果只是需要将数组的值拷贝到另一个数组,可以使用System的一个静态方法arraycopy(),有四个参数:from,fromIndex,to,toIndex,count,意思是将数组from中的索引为fromIndex开始的元素,拷贝到数组to中索引为toIndex的位置,拷贝的元素个数为count个。
3、多维数组
- Java中支持多维数组,多维数组的声明是通过每一维一组方括号的方式来实现
如:
二维数组: int【】【】,
三维数组:int【】【】【】
当使用new来创建多维数组时,不必指定每一维的大小,而只需要指定最左边的维的大小就可以了。
- 创建多维数组
知道数组元素,可以不用new,直接初始化数组
int【】【】a = {{1,2},{10,2},{20,1}}
new来创建
int a【】【】 = new int【4】【5】;
int b【】【】 = new int【3】【】;