数组的基础知识
单个的数组变量可以引用一个大的数据集合
一旦数组被创建,它的大小是固定的。使用一份数组引用变量,通过下标来访问数组中的元素。
声明数组变量
元素类型[ ] 数组引用变量
double[ ] myList;
元素类型 数组引用变量[ ]
创建数组
不同于基本数据类型变量的声明,并不在内存中给数组分配任何空间。只是创建一个对数组的引用的存储位置。如果变量不包含对数组的引用,那么这个变量的值为null。除非数组已经被创建,否则不能给它分配任何元素。
myList=new double[10];
声明、创建、赋值合并在一条语句里
double[ ] myList=new double[10];
赋值:
myList[0]=1.2;
myList[1]=2.99;
…
myList[9]=129.043;
*实际上一个数组变量存储的是指向数组的引用。
数组大小和默认值
myList.lengths为10
当创建数组后,元素被赋予默认值,数值型基本数据类型的默认值为0,char型的默认值为‘\u0000’,boolean型的默认值为false。
访问数组元素
数组元素可以通过下标访问。
下标变量:
myList[9];
数组初始化语法
double[ ] myList={1.0, 2.3, 8.9};
数组初始化语法中不使用操作符new。
处理数组
使用随机数初始化数组:
for(int i=0;i<=myLIst.length;i++){
myList[i]=Math.random()*100;
}
显示char[]类型数组:
cha[] city={‘D’,‘a’,‘l’,‘l’,‘a’,‘s’};
System.out.println(city);
foreach循环
不使用下标变量就可以顺序遍历整个数组:
for(double e:myList){
System.out.println(e);
}
越界访问数组会抛出一个运行错误ArrayIndexOutOfBoundsException
数组的复制
list2=list1;
该语句并不能将list1引用的数组内容复制给list2,而只是将list1的引用值复制给了list2,使两个变量都指向相同的内存地址。
list1和list2都指向同一个数组,list2原先所引用的数组不能再引用,它就变成来了垃圾,会被Java虚拟机自动回收(这个过程称为垃圾回收)。
Java可以使用赋值语句复制基本数据类型的变量,但不能复制数组。
复制数组有三种方法:
1)使用循环语句逐个的复制数组元素
int[] sourceArray=(2,3,1,5,10);
int[] targetArray= new int[sourceArray.length];
for(int i=0;i<=sourceArray.length;i++){
targetArray[i]=sourceArray[i];
}
2)使用System类的静态方法arraycopy
System.arrayCopy(sourceArray,0,targetArray,0,sourceArray.length);
0是两数组是起始位置,复制完成后两数组占有独立的内存空间。
3)使用clone方法复制数组。
将数组传递给方法
当将一个数组传递给方法时,数组的引用被传给方法。
//匿名数组:没有显式的引用变量
printArray(new int[]{1,5,3,4});
public static void printArray(int[] array){
for(int i=0;i<array.length;i++){
System.out.print(array[i]+“ ”);
}
}
从方法中返回数组
当从方法中返回一个数组时,数组的引用被返回。
int[] list1={1,3,4,5,5};
int[] list2=reverse(list1);
public staticint[] reverse(int[] list){
int [] result=new int[list.length];
for(int i=0,j=result.length-1;i<list.length;i++,j–){
result[j]=list[i];
}
return result;
}
可变长参数列表
具有同样类型的可变长度的参数可以传递给方法,并将作为数组对待。
printMax(34,3,2,4,5.3);
printMax(new double[]{1,2,3});
数组的查找
如果一个数组排好序了,对于寻找数组中的一个元素,二分查找比线性查找更加高效。
线性查找法
线性查找法将要查找的关键字key与数组中的元素逐个进行比较。
二分查找法
前提是数组中的元素必须已经排好序。
数组的排序
Arrays类
java.util.Arrays类包含一些实用的方法用于常见的数组操作,比如排序和查找。
可以使用sort或者parallelSort方法对整个数组或部分数组进行排序。
可以使用二分查找法binarySearch方法,在数组中查找关键字。数组必须提前按升序排列好。
可以使用equals方法检测两个数组是否相等。
可以使用fill方法填充整个数组或部分数组。
可以使用toString方法来返回一个字符串的所有元素。
命令行参数
main方法可以从命令行接收字符串参数。
向main方法传递字符串
java TestMain arg0 arg1 arg2
java TestMain “First num” alpha 53