第六章 数组
一. 数组概述
1.1 什么是数组?
数组是存储在一个连续的内存块中的元素集合。
数组中的每个元素必须是相同的数据类型,并且通过索引进行区分。数组中的第一个元素的索引为0。
为什么要用数组?
单一值类型变量有时候很难满足应用程序的设计要求。
数组类型变量可以同时存储多个同类型基础数据类型变量或对象。
二. 创建数组
在Java中,创建数组有两个步骤:
声明一个数组变量;
语法:
数据类型[]数组变量名;
或
数据类型 数组变量名[];
例如:
int[] sums;或 int sums[];
2、使用new关键字初始化数组,并指定数组的大小。
语法:
数组变量 = new 数组类型[数组长度];
例如:
sums= new int[20];
三. 访问数组
p 数组中的元素通过用对该数组的变量名(引用)加上一个用于描述我们要访问数组哪一个元素的整型索引值来访问。
int [] sums = new int[20];
sums[0] = 1;
sums[1] = 2;
…….
sums[19] =20;
为了给20个元素赋值,就需要20条语句。显然,用for循环赋值更方便。
for(int i = 0; i < 20; i++){
sums[i] = i + 1;
四. 数组的引用double[] rainfall = newdouble[12];
数组在内存中是地址连续的一串空间。
五. 数组的长度
在使用访问数组元素时,特别要注意,不要超出数组所分配的空间
Java语言的数组与其它语言的数组的不同之处在于:Java中的数组是对象。这样做的好处之一为:Java中的每个数组都有一个length属性来代表数组的大小,可以极大地减少数组访问越界的可能性。
六. 引用数组
一个对象数组被声明和创建,同基本数据类型数组被创建一样,
第一步:定义数组 Person[] personArr;
第二步:创建数组 personArr= new Person[20];
l 数组元素被初始化为null
因为每个数组元素都是一个对象,每个对象也都必须被创建.
person[0] = new Person( );
l 当为了能分配数据值给对象,我们能执行
person[0].setName (“Ms. Latte”);
person[0].setAge (20);
person[0].setGender (‘F’);
这里的语法是调用对象的方法,我们使用索引表达式来引用对象,从而代替一个引用变量。
七. 数组初始化
数组的初始化有两种方式:静态初始化和动态初始化。
l 静态初始化:数组初始化程序在创建数组时,有两种写法
int [] odds = new int[]{1, 3, 5, 7, 9};
String [] weekend =new String[] {"星期六", "星期天"};
或者,不需要使用new关键字。
int [] odds = {1, 3, 5, 7, 9};
String [] weekend = {"星期六", "星期天"};
值得注意的是:数组初始化程序只能用在声明新数组引用时。
String [] weekend;
weekend = {"星期六", "星期天"}; //编译不能通过
l 动态初始化:通过 new关键字开辟指定内存空间,然后再赋值
八. 数组复制
将已存在的数组的内容复制到新的数组中。
方法一:创建一个新数组,然后使用for循环挨个拷贝
方法二:
system.arraycopy(num , 0, this.num,0 , 5)
第一个参数是原数组名,第二个参数是原数组的起始位置,要复制到目标的数组名,第四个是目标小标的起始位置,第五个是数组的原数组的个数。
九. 应用类型的复制
1.浅复制:
他是通过拷贝目标数组元素的值完成考别
特点:原数组与目标数组的元素指向同一对象,这种类型复制就叫浅类型复制。
2.深复制:(copy)
1.目标数组通过实例化对象复制给数组元素。
2.元素指向的对象复制给目标数组元素指向的对象
深拷贝耗资源,
用深拷贝的时候需要谨慎使用,为了节省空间。