一维数组
声明并创建数组变量
elementType[] arrayRefVar = new elementType[arraySize];
elementType arrayRefVar[]= new elementType[arraySize];(元素类型 数组引用变量[])
推荐使用第一种方法,元素类型可以是任意数据类型,但是数组中所有元素的数据类型必须一样。
简写: elementType[] arrayRefVar = {value0,value1,...,valuek};
使用初始化数组简写方式,必须将声明、创建和初始化数组都放在一条语句中。将它们分开会产生语法错误。
声明一个数组变量时并不给数组分配内存空间,只是创建一个数组引用的存储位置,如果变量不包含对数组的引用,那么变量的值为null。 除非数组已经被创建,否则不能给它分配任何元素。
数组大小和默认值
数组一旦被创建它的大小就是固定的,不能被修改,只能通过arrayRefVar[index]
引用变量(地址)和元素下标访问数组元素。 越界访问是经常出现的程序错误,会抛出一个运行时错误arrayIndexOfBoundsException,
因此下标的范围不能超出0~arrayRefVar.length-1。
当创建数组后,它的元素被赋予默认值。数值型基本数据类型的默认值是0,char型的默认值为'\u0000',Boolean型的默认值是false。
for each 循环
for (double e : myList){ System.out.println(e); }
注意:变量e必须声明为与myList中元素相同的数据类型。
复制数组
在Java中,可以使用赋值语句复制基本数据类型的变量,但不能复制数组。
将一个数组变量赋值给另一个数组变量,list1 = list2 ;
实际上是将一个数组的引用复制给另一个变量,使两个变量都指向相同的内存地址。
复制数组的方法
- 使用循环语句逐个地复制数组中的元素
- 使用System类中的静态方法arraycopy
arraycopy(sourceArray,srcPos,targetArray,tarPos,length);
参数srcPos
和tarPos
分别表示在源数组sourceArray
和目标数组targetArray
中的起始位置。复制的元素个数由length
指定。复制完成后,源数组和目标数组具有相同的内容,但内存空间独立。 - 使用clone方法复制数组
将数组传递给方法
当一个数组传递给方法时,数组的引用被传递给方法。即方法中的数组和传递的数组是一样的,如果改变方法中的数组,方法外的数组也会改变。
例:
public class test{
public static void main(String[] args){
int[] list = {1,2,3,4,5};
reverse(list);
for(int i = 0;i<list.length;i++)
System.out.print(list[i]+"");
}
public static void reverse(int[] list){
int[] newList = new int[list.length];
for(int i = 0;i<list.length;i++){
newList[i] = list[list.length-1-i];
}
list = newList;
}
}
输出为12345 方法中的引用变量改变不影响方法外,但是方法中的数组元素改变,方法外同样改变。
二分查找法
二分查找法的前提条件是列表必须以升序排序。如果关键字在列表中,则返回其匹配元素的下标;否则返回一个负整数k,满足-k-1为插入该关键字的位置。