第5章 数组
一、一维数组
1、创建
一维数组实质上是一组相同类型数据的集合,在Java中数组不属于数据类型,而是一种对象。 数组的两种声明方式:
int[] arr1;
int arr2[];
数组声明之后,在使用之前还需要先分配内存空间:
arr1=new int[3]; //数组元素个数为3,即长度为3;arr2=new int[2];
声明和分配空间也可以一并操作:
int arr1[]=new int[3];
int arr2[]=new int[2];
元素赋值的两种方法:
arr1[]=new int[]{1,2,3};
arr2[]={4,5};
//找出一维数组中的最小值元素 public class ArrayMinNum { public static void main(String[] args){ int arr[]=new int[]{12,398,25,1024,414,1973,2,520,1013}; int tempMin=arr[0]; //最小值暂存器,初始值为第一个元素值 int markNumber=1; //位置标识符 for(int j=1;j<arr.length;j++){ if(tempMin>arr[j]){ tempMin=arr[j]; markNumber=j+1; } } System.out.println("数组arr中最小值是"+tempMin+";是数组中第"+markNumber+"个元素"); } }
二、二维数组
二维数组中各元素实际上是一维数组,创建、分配空间及赋值类似:
int arr[][]; //声明创建
arr=new int[2][3] //分配2*3个元素空间
arr={{1,2,3},{4,5,6}}; //赋值
int arrx[][]=new int[][]{{1,2},{3,4},{5,6}}; //创建+分配+赋值
//对一个二维数组进行转置操作
public class ArraySwap {
public static void main(String[] args) {
int arr1[][]=new int[][]{{1,2,3},{4,5,6},{7,8,9}};
int arr2[][]=new int[3][3];
for(int i=0;i<arr1.length;i++){
for(int j=0;j<arr1[i].length;j++){
arr2[j][i]=arr1[i][j];
}
}
for(int i=0;i<arr1.length;i++){
for(int j=0;j<arr1[i].length;j++){
System.out.print(arr1[i][j]+" ");
}
System.out.println("");
}
for(int i=0;i<arr2.length;i++){
for(int j=0;j<arr2[i].length;j++){
System.out.print(arr2[i][j]+" ");
}
System.out.println("");
}
}
}
三、数组的基本操作
1、通过for方法的遍历元素
//1、二维数组的元素遍历输出public class ArrayTrap { public static void main(String[] args){ int arr[][]=new int[][]{{1,3,5,7},{2,4,6},{0,10}}; System.out.println( System.out.println("for循环常规方法:"); for(int i=0;i<arr.length;i++){ for(int j=0;j<arr[i].length;j++){ System.out.print(arr[i][j] System.out.print(arr[i][j]+" "); } System.out.println(""); } System.out.println("foreach方法:"); for(int arrx[]:arr){ for(int a:arrx){ System.out.print(a System.out.print(a+" "); } System.out.println(""); } } }
2、填充替换数组元素
(1)fill(int[] a,int value)方法:将value的值赋给数组a中每一个元素,该方法的返回值为更改后的数组a。
(2)fill(int[] a,int fromIndex,int toIndex,int value):将value的值赋给数组a中的元素,范围从索引为fromIndex的元素开始,到索引为toIndex的元素结束不包括该元素,该方法的返回值为更改后的数组a。
//将数组中部分元素更改值
import java.util.Arrays;
public class ArrayDisplace {
public static void main(String[] args){
int arr[]=new int[]{13,8,9,520,14,4,24,27};
System.out.println("填充前数组为:");
for(int x:arr){
System.out.print(x+" ");
}
Arrays.fill(arr,1,4,520);
System.out.println("填充后数组为:");
for(int x:arr){
System.out.print(x+" ");
}
}
}
3、复制数组
(1)copyOf(arr,int newlength):arr是要进行复制的数组。newlength用于指定赋值后新数组的长度,如该长度大于arr长度,则其余用0填充(整型数组)或null(char型数组)。如果newlength小于arr长度,则按newlength截取。返回值为复制后的新数组。
(2)copyOfRange(arr,int fromIndex,int toIndex):复制范围从索引为fromIndex的元素开始,到索引为toIndex的元素结束不包括该元素,该方法的返回值为复制后的新数组。
四、实例
//用冒泡法从小到大排序数组元素
public class BubbleSortArray {
public static void main(String[] args){
int ourArray[]=new int[]{1973,10,1013,24,414,4,1980,520,13,19999};
int temp;
System.out.println("排序前:");
for(int x:ourArray){
System.out.print(x+" ");
}
for(int i=1;i<ourArray.length;i++){
for(int j=0;j<ourArray.length-i;j++){
if(ourArray[j]>ourArray[j+1]){
temp=ourArray[j+1];
ourArray[j+1]=ourArray[j];
ourArray[j]=temp;
}
}
}
System.out.println("排序后:");
for(int x:ourArray){
System.out.print(x+" ");
}
}
}
//创建一个int型二维数组,求各元素之和并打印
public class ArraySum {
public static void main(String[] args){
int arr[][]=new int[][]{{13,414,73},{10,24,80},{2012,10,13},{520,13,14}};
int sum=0;
for(int a[]:arr){
for(int x:a){
sum+=x;
}
}
System.out.println("二维数组arr各元素总和为"+sum);
}
13 }