Java中的数组
数组是由同一类型的对象或者基本数据类型组成,并封装在同一个标识符(数组名称)下的一种数据结构。在Java中,数组是一种引用数据类型,可以看做对象,需要进行初始化,也可以直接赋值给Object对象,调用Object中的所有方法。每个数组中都有一个由public final修饰的成员变量--length,即数组中含有元素的个数,该变量的值必须为0或正整数。
数组的创建总共有数组的声明、数组的构建、数组的初始化三步,最后才能使用数组。
一.声明数组的引用
声明数组时可以不指明数组元素的个数,也可以不为数组元素分配内存空间,只要指定数组元素的数据类型和数组名即可,此时是一个空引用。如:
//数组声明有两种形式 //第一种:Type[] arrayName; int[] intArray; String[] stringArray //第二种:Type arrayName[]; int intArray[]; String stringArray[];
二.数组的创建
用关键字new构成数组的创建表达式,表示在创建时动态分配内存空间。此时可以指定数组类型和数组元素的个数,元素个数既可以是常量也可以是变量。基本类型数组的每个元素都是一个基本类型的变量,引用类型数组的每个元素都是元素的引用。如:
//数组创建的基本格式位:arrayName = new Type[componets number]; int[] ai; ai = new int[10]; String[] s; s= new String[3] //可以将数组的声明与创建一并执行 int ai[] = new int[10]; //同时创建多个数组 String[] s1 = new String[3], s2 = new String[8];
若不初始化数组,数值型数组会自动初始化为0,字符型数组会自动初始化为null,布尔型数组会初始化为false,引用型数组会自动初始化为空引用null。
三.数组元素的初始化
声明数组名时,给出了数组的初始值,程序变回利用数组初始值创建数组并对它的各个元素进行初始化,如:
int a[] = {22,33,44,55};
若创建数组时没有指定初始值,数组便会被赋予默认的初始值。
四.数组的使用
数组的引用可以通过数组名加下标来对数组的元素进行访问,即arrayName[index]。其中数组下标必须为byte,int,short或者char,从0开始计数,下标值的最大值为length-1,如果超过最大值,将会产生数组越界异常。
数组名是一个引用:
public class Arrays{
public static void main(String[] args){
int[] a1 = {1,2,3,4,5};
int[] a2;
a2 = a1;
for(int i = 0;i < a2.length; i++){
a2[i]++;
}
for(int i=0;i < a1.length; i++){
System.out.println("a1[" + i + "]" + a1[i]);
}
}
}
//数组a1和数组a2指向同一个引用,当数组a2中的元素加1时,数组a1中的元素便也加1了。
//输出结果
a1[0] = 2
a1[1] = 3
a1[2] = 4
a1[3] = 5
a1[4] = 6
对于字符串构成的数组,每个字符串都是一个引用。如:
public class ArrayOfStringsDemo{
public static void main(String[] args){
String[] anArray={"String One","String Two","String Three"};
for(int i = 0;i < anArray.length; i++){
System.out.println(anArray[i].toLowerCase());
}
}
}
//运行结果
string one
string two
string three
五.复制数组或数组的部分元素
复制数组用的方法是arraycopy,其格式为
public static void arraycopy(Object source, int srcIndex, Object dest,int destIndex,int length)
例;
public class ArrayCopyDemo{
public static void main(String[] args){
char[] copyFrom = {'d','e','c','a','f',
'f','e','i','n','a','t','e','d'};
char[] copyTo = new char[7];
System.arraycopy(copyFrom,2,copyTo,0,7);
System.out.println(new String(copyTo));
}
}
//输出结果
caffina
六.数组的常用方法
数组中的所有方法基本都是封装在java.util.Arrays包中,其中比较常用方法为:
- static String toString(type[] a):返回包含a中数据元素的字符串,这些数据元素被放在括号内,用逗号分割。
type:int,long,short,char,byte,boolean,float或double
- static type copyOf(type[] a,int length)
- static type copyOfRange(type[] a,int start, int end)
返回与a类型相同的一个数组,其长度为length或者end - start,数组元素为a的值。
type:int,long,short,char,byte,boolean,float或double
start:起始下标,包含这个值
end:终止下标,不包含这个值。
length:拷贝的数组元素长度,取值范围为0~源数组的大小。
- static void sort(type[] a)
采用优化的快速排序方法对数组进行排序。
- static int binarySearch(type[] a,type v)
- static int binarySearch(type[] a,int start,int end,type v)
采用二分搜索法来查找值v,如果查找成功,则返回对应的下标值,否则返回一个负数值r。-r-1是为保持a有序v应该插入的位置。其中v的数据类型必须和a中的数据类型一致。
- static void fill(type[] a,type v)
将所有数据元素值都设置为v。
- static boolean equals(type[] a,type[] b)
如果两个数组大小、下标相同的数组元素也相同,则返回true。
七.多维数组的创建与使用
二维数组是数组的数组,其创建方法与一维数组原理相同。如:
//方法一:只声明不初始化
int[][] gradeTable;//gradeTable 是一个指向2维整数数组的引用,其初始值为null
//方法二:声明并初始化
int[][] myArray = new int[3][5];//定义引用时,同时构造数组并初始化引用,初始值为0,设置二维数组大小时,前者必须是不为空的正整数
//方法三:定义引用、构造数组,初始化数组元素
int[][] myArray = {{8,1,2,2,9},{1,9,4,0,3},{0,3,0,0,7}};
二维数组的长度及每行的长度
class UnevenExample3{
public static void main(String[] args){
//声明构造一个二维数组
int[][] uneven = {{1,9,4},{0,2},{0,1,2,3,4}};
//数组的长度(行数)
System.out.println("Length of array is :" + uneven.length);
//数组每一行的长度(列数)
System.out.println("Length of row[0] is :" + uneven[0].length);
System.out.println("Length of row[1] is :" + uneven[1].length);
System.out.println("Length of row[2] is :" + uneven[2].length);
}
}
//运行结果
Length of array is : 3
Length of row[0] is : 3
Length of row[1] is : 2
Length of row[2] is : 5
浙公网安备 33010602011771号