1、数组的概念
数组是特定类型数据的有序集合,它将相同类型的数据组织在一起,可以实现对它们的线性访问。
“[ ]”叫做索引运算符(Index Operator),用于访问数组中的特定元素。
数组下标的类型是长整型。
2、数组的创建和初始化
声明数组引用变量:
不同于基本数据类型,声明一个数组引用变量时并不为数组在内存中分配存储空间。它只是创建了一个数组的引用的位置,该引用可以不指向任何数组。此时,可以赋值为空。
创建数组:new操作符开辟内存。在编译时,必须能够确定数组的大小,否则编译器会报错。
/*创建数组*/
float [] scores=new float[10];
/*初始化数组*/
/*可以直接在创建时初始化*/
float[] scores={1,2,3,4};
float[] scores=new float[]{1,2,3,4}
在执行后,数组名scores指向内存中数组对象空间的首地址。
3、数组操作
scores.length记录了数组的长度;
如何实现数组的乱序(Shuffle)功能?
for-each用于遍历集合类型,它不使用下标就可以顺序遍历整个集合。
/*逐个输出数组元素*/
for(float x:scores){
System.out.println(x);
}
4、数组复制
(1)for循环,要避免数组越界;
(2)System.arraycopy(Object src,int srcPos,Object dest,int destPost, int length)
srcPos复制的起始位置,destPost在目标数组中放置数据的起始位置,length复制的数据的长度;
5、传递数组
数组有属性成员,所以数组是对象,它作为参数传递时传递的是数组的引用。
6、可变长参数列表
方法可以声明嫩接受可变数目的参数,可变长参数本质上是一个数组。
对这样的方法,即可以传递离散的若干个值,也可以传递一个数组对象。
如果方法有多个参数,可变长参数放在参数列表的最后
/*函数的可变长参数列表*/
public int add(int...arrays){
int sum=0;
for(int i:arrays)
sum+=i;
}
/*使用*/
add(1,2,3);
add(new int[]{1,2,3});
7、二维数组:一个一维数组的每一个元素是一个一维数组。
8、二分查找——在有序的数组中查找特定元素,是典型的递归算法。
/*二分查找*/
public int binarySearch(float[] array,int from,int to,float key){
if(from<0 || to<0){
System.out.println("params from & length must lager than 0");
return -1;
}
if(from<=to){
int middle=(from>>>1)+(to>>>1); // 右移除以2
double temp=array[middle];
if(temp>key){
to=middle-1;
}else if(temp<key){
from=middle+1;
}else{
return middle;
}
}
return binarySearch(array,from,to,key);
}
9、java.util.Arrays
Arrays是提供数组操作的包装类,它所有的方法都是静态的。
/*每个函数都有多个重载函数*/
/*给数组元素赋值*/
Arrays.fill()
/*按升序对数组排序*/
Arrays.sort()
/*比较两个数组中的元素是否相同*/
Arrays.equals(array1,array2)
/*查找元素,对排好序的数组进行二分查找*/
/*3在数组中的位置*/
Arrays.binarySearch(array1,3)
10、对象数组
数组元素不是基本类型时,数组中存放的是引用类型,而不是对象本身。
所以必须让数组元素指向具体对象后,才能访问数组,否则会引发异常。