目录
一维数组创建
1.声明数组
声明一个一维数组的方法很简单,格式如下:
数据类型名[ ] 数组名; 或 数据类型名 数组名[ ];
若声明一个数组,即先声明数组的数据类型(可以是基本数据类型或者是引用类型),它决定了数组中的每个元素都是该数据类型,再声明数组的名字。
声明一个整型数组a:
int[] a; 或 int a[];
Student[] aStudent; 或 Student aStu;
2.分配数组内存空间
声明一个一维数组之后,就可以通过new关键字为其申请分配内存空间,格式为:
new 数组类型[数组大小]
其中[数组大小]是一个整型常量值,可以通过数组属性length来访问。
int[] intArray = new int[5];
此处定义一个整型数组intArray,其中包含5个元素,每个元素为int类型,共向系统申请20个字节的内存空间。
3.数组元素访问
对于一个已经定义好的大小为N的一维数组,包含了N个同类型的数组元素,对每个数组元素的访问可采用以下格式:
数组名[元素下标]
其中,元素下标是元素在数组中的位置,为整型值,元素下标的取值范围是[0, N-1]。
int[] a=new int[3]; int s1,s2;
a[1]=1; a[2]=2;
s1=a[1]+a[2]; // s1值为3
s2=a[0]+a[2]; // s2值为2,a[0]虽然未有明确赋值,但具有默认值0
a[3]=3; // error, 运行时错误,不存在a[3]元素
数组初始化
一维数组初始化根据实现方式不同,可以分为静态初始化和动态初始化。数组所需的内存空间是在其初始化的时候由系统分配的。
1.静态初始化
静态初始化,即在声明数组的时候,直接用数据为其赋值,此时数组的大小由初始化数据的个数决定。
int intArray[]={1,2,3,4}; // intArray数组大小为4
String stringArr[]={"abc", "How", "you"};//stringArr数组大小为3
2.动态初始化
动态初始化,即通过new 关键字为数组申请内存空间并赋值,其中对于类类型数组需要明确数组结构,并为每个数组元素申请空间。
String stringArray[ ]= new String[2]; //确定数组有2个元素
stringArray[0]= new String("abc");//为第一个数组元素分配空间
stringArray[1]= new String("123");//为第二个数组元素分配空间
一维数组的拷贝
一维数组拷贝这个问题可以分解为两个子问题:
一是数组元素的拷贝; 二是数组名的拷贝。
数组元素的拷贝属于值复制,即把数组元素的值作一个完全的复制。
1.数组元素的拷贝
int[] a={1,2,3};
int x=a[1]; // 变量x具有了数组元素 a[1]的完全备份
2.数组名的拷贝
数组名的拷贝属于地址复制,即把数组首元素的地址复制过去,而数组的实体(各数组元素的值)没有复制过去,这样处理的结果是,两个数组名管理着同一个数组实体空间。
int[] a={1,2,3};
int[] b=a; // 把数组a的首地址复制给数组b,结果 数组a和b
//管理着同一个数组空间,a[i]即为b[i]
b[2]=5; //等价于执行了a[2]=5
数组遍历
数组遍历是数组应用中的最基本操作,指的是每一个数组元素至少被访问一次,每次访问的具体操作可以是读取或修改。
遍历数组首先要知道数组大小,Java提供了length属性方便获取数组大小,格式:
数组名.length
for循环遍历
利用for循环与数组长度length属性的结合,可以高效地实现数组的遍历。
int[] a=new int[10];
for(int i=0; i< a.length; i++)
a[i]=i;//为每一个a[i]赋值
foreach循环遍历
自JDK 1.5.0起Java提供了增强型for的新特性,称为foreach循环,格式如下: for (元素类型 临时变量x : 遍历对象obj)
{ 访问x的语句; }
foreach循环常用于数组遍历,简单而高效。
int arr[] = {2, 3, 1}; //数组元素arr[0]~arr[2]
for (int x : arr)//每次循环读取arr[i]的值,并存入变量x且i自增1
System.out.print(x+“ ”); //依次输出数组元素的值:1 2 3
利用foreach输出数组: