本章目标
- 掌握数组的引用传递
- 可以使用方法接收或返回一个数组
- 了解Java对数组的操作支持
1、接收和返回数组
一个方法可以接收一个数组,也可以返回一个数组,如果方法接收一个数组的话,则此方法对数组所做的方法将全部被保留下来。
public class ArrayRefDemo01{
public static void main(String args[]){
int temp[] = {1,3,5} ; // 利用静态初始化方式定义数组
fun(temp) ; // 传递数组
for(int i=0;i<temp.length;i++){
System.out.print(temp[i] + "、") ;
}
}
public static void fun(int x[]){ // 接收整型数组的引用
x[0] = 6 ; // 修改第一个元素
}
};
输出结果:6、3、5
方法除了可以接收数组之外,也可以通过返回一个数组,只需要在返回值类型上,明确地声明出返回的类型是数组即可。
public class ArrayRefDemo02{
public static void main(String args[]){
int temp[] = fun() ; // 通过方法实例化数组
print(temp) ; // 打印数组内容
}
public static void print(int x[]){
for(int i=0;i<x.length;i++){
System.out.print(x[i] + "、") ;
}
}
public static int[] fun(){ // 返回一个数组
int ss[] = {1,3,5,7,9} ; // 定义一个数组
return ss ;
}
};
输出结果:1、3、5、7、9
2、范例
2.1、定义排序方法
public class ArrayRefDemo03{
public static void main(String args[]){
int score[] = {67,89,87,69,90,100,75,90} ; // 定义整型数组
int age[] = {31,30,18,17,8,9,1,39} ; // 定义整型数组
sort(score) ; // 数组排序
print(score) ; // 数组打印
System.out.println("\n---------------------------") ;
sort(age) ; // 数组排序
print(age) ; // 数组打印
}
public static void sort(int temp[]){ // 执行排序操作
for(int i=1;i<temp.length;i++){
for(int j=0;j<temp.length;j++){
if(temp[i]<temp[j]){
int x = temp[i] ;
temp[i] = temp[j] ;
temp[j] = x ;
}
}
}
}
public static void print(int temp[]){ // 输出数组内容
for(int i=0;i<temp.length;i++){
System.out.print(temp[i] + "\t") ;
}
}
};
输出结果:
67 69 75 87 89 90 90 100
---------------------------
1 8 9 17 18 30 31 39
以上只是完成了整型数组的排序操作,如果一个操作中及要求可以排序整型也可以排序浮点型等各种数据,如果分别实现则会比较麻烦,所以在Java中为了操作数组方便,提供了一个支持。
public class ArrayRefDemo04{
public static void main(String args[]){
int score[] = {67,89,87,69,90,100,75,90} ; // 定义整型数组
int age[] = {31,30,18,17,8,9,1,39} ; // 定义整型数组
java.util.Arrays.sort(score) ; // 数组排序
print(score) ; // 数组打印
System.out.println("\n---------------------------") ;
java.util.Arrays.sort(age) ; // 数组排序
print(age) ; // 数组打印
}
public static void print(int temp[]){ // 输出数组内容
for(int i=0;i<temp.length;i++){
System.out.print(temp[i] + "\t") ;
}
}
};
输出结果:
67 69 75 87 89 90 90 100
---------------------------
1 8 9 17 18 30 31 39
2.2、定义排序方法
可以将一个数组中的指定位置的内容拷贝给另外一个数组,如果,此时要设计方法的话,则此方法中要传递多少个参数呢?
- 源数组
- 源数组的开始点
- 目标数组
- 目标数组的开始点
- 拷贝的长度
那么,按照以上的思路,完成一个拷贝的操作
public class ArrayRefDemo05{
public static void main(String args[]){
int i1[] = {1,2,3,4,5,6,7,8,9} ; // 源数组
int i2[] = {11,22,33,44,55,66,77,88,99} ;// 目标数组
copy(i1,3,i2,1,3) ; // 调用拷贝方法
print(i2) ;
}
// 源数组名称,源数组开始点,目标数组名称,目标数组开始点,拷贝长度
public static void copy(int s[],int s1,int o[],int s2,int len){
for(int i=0;i<len;i++){
o[s2+i] = s[s1+i] ; // 进行拷贝操作
}
}
public static void print(int temp[]){ // 输出数组内容
for(int i=0;i<temp.length;i++){
System.out.print(temp[i] + "\t") ;
}
}
};
输出结果:
11 4 5 6 55 66 77 88 99
对于这样的拷贝功能,在Java中也是有所支持的,直接使用Java提供的一个操作语句即可。
public class ArrayRefDemo06{
public static void main(String args[]){
int i1[] = {1,2,3,4,5,6,7,8,9} ; // 源数组
int i2[] = {11,22,33,44,55,66,77,88,99} ;// 目标数组
System.arraycopy(i1,3,i2,1,3) ; // 调用Java中对数组支持的拷贝方法
print(i2) ;
}
public static void print(int temp[]){ // 输出数组内容
for(int i=0;i<temp.length;i++){
System.out.print(temp[i] + "\t") ;
}
}
};
输出结果:
11 4 5 6 55 66 77 88 99
3、总结
- 数组的引用传递传递的就是堆内存的使用权,可以将一个数组传递到方法之中,传递的时候不需要写上“[ ]”,直接写名字即可。
- 方法中对数组所做的修改都会被保留下来。
- 在Java中提供了一些对数组操作支持的方法,后续会进行介绍。