数组是由相同类型的若干项组成的一个数据集合,数组中的每个数据称为元素。
数组声明格式如下: 数据类型[] 标识符 推荐使用
或者
数据类型 标识符[]
一维数组 1、一维数组定义和初始化 int[] arr = new int[]{1,3,5,7,9};
或者
int[] arr = {1,3,5,7,9};
备注这两种方法之间没有任何区别。
public class ZachIntArray{ public static int[] arr1 = new int[]{1,3,5,7}; public static int[] arr2 = {2,4,6,8}; public static void main(String[] args) { int i = 0; for(i = 0;i < arr1.length;i++){ System.out.println(arr1[i] + "|" + arr2[i]); } } }注意: 在给数组分配内存空间时,必须指定数组能够存储的元素来确定数组大小。创建数组之后不能修改数组的大小,可以使用length属性获取数组的大小。
2、数组作为函数的形参
class ChangeIt{ static void doIt(int[] z) { z = null; } } public class ZachArray{ public static void main(String[] args){ int[] zachArray = {1,2,3,4,5}; ChangeIt.doIt(zachArray); int i = 0; for(i = 0; i < zachArray.length;i++){ System.out.print(zachArray[i] + " "); } System.out.println(); } }输出结果: 1 2 3 4 5
1、需要注意上面函数参数; 2、需要注意循环体重打印,加字符和加字符串的区别(单引号和双引号),结果会截然不同。 3、java基本数据类型传递参数时是值传递;引用类型传递参数是引用传递。然而数组对象虽然是引用传递,但是将引用z=null,只是将引用z不指向任何对象,并不会对原先指向的对象数据进行修改。
二维数组 1、二维数组的定义和初始化 int[][] array = {{1,2,3},{4,5,6}};
int[][] array = new int[][]{{1,2,3},{4,5,6}};//数组的个数由后面初始化的实体给出
几种错误的声明方式: 1、Cannot define dimension expressions when an array initializer is provided
int[][] myArray2 = new int[2][3]{{1,2,3},{4,5,6}};错误原因:在声明的时候,不允许同时定义数组大小。 修改方案:int[][] myArray2 = new int[][]{{1,2,3},{4,5,6}};
2、Array constants can only be used in initializers
int[][] myArray3 = new int[2][3]; myArray3 = {{1,2,3},{4,5,6}};错误原因:一次性赋值必须在数组定义的时候赋值,如错误一。 修改方案:
int[][] myArray3 = new int[2][3]; for(int ii = 0;ii < myArray.length;ii++){ for(int jj = 0;jj < myArray[0].length;jj++){ myArray3[i][j] = myArray2[i][j]; } }数组的使用: 1、遍历数组 方法一
int[][] myArray = {{1,2,3},{4,5,6}}; int i = 0,j = 0; for(i = 0;i < myArray.length;i++){ for(j = 0;j < myArray[0].length;j++){ System.out.print(myArray[i][j] + " "); } System.out.println(); }方法二
for(int[]x : myArray){ for(int z: x){ System.out.print(z + " "); } System.out.println(); }2、fill方法 原型: fill(int[]a, int value) fill(int[]a, int fromIndex, int toIndex, int value)//include fromIndex, exclude toIndex 该方法可将指定的int值value分配给int型数组。
import java.util.Arrays; public class ZachFill{ static void printIntArray(int[] a) { for(int i : a){ System.out.print(i + " "); } System.out.println(); System.out.println("--------------"); } public static void main(String[] args) { int[] myArray = new int[]{1,3,5}; printIntArray(myArray); Arrays.fill(myArray,9); printIntArray(myArray); } }3.sort方法 原型: Array.sort(object);
public class ZachArray { static void printIntArray(int[] a) { for(int i = 0;i < a.length;i++){ System.out.print(a[i] + " "); } System.out.println(); } public static void main(String[] args) { int[] myArray = new int[]{23,14,27,48,31,20}; System.out.println("After Sort"); printIntArray(myArray); Arrays.sort(myArray); System.out.println("After Sort"); printIntArray(myArray); } }4、数组复制 copy方法 原型: copyOf(arr, int newArrayLength); arr:要复制的数组,newArrayLength:新数组长度。
copyOfRange(arr,int fromIndex, int toIndex); arr:要复制的数组,fromIndex:指定开始复制的下标(含),toIndex:指定结束复制的下标(不含)。
import java.util.Arrays; public class ArrayCopy { static void printIntArray(int[] z) { for(int x : z){ System.out.print(x); } System.out.println(); } public static void main(String[] args) { int[] myArray = new int[]{1,3,5,7,9,2,4,6,8}; System.out.println("print myArray:"); printIntArray(myArray); int[] copyMyArray = Arrays.copyOf(myArray,myArray.length); System.out.println("print copyMyArray:"); printIntArray(myArray); int[] partCopyMyArray = Arrays.copyOfRange(myArray, 1, 4); System.out.println("print partCopyArray:"); printIntArray(partCopyMyArray); } }数组排序 1、冒泡排序
class BubbleSort{ void printIntArray(int[] arr) { for(int x : arr){ System.out.print(x + " "); } System.out.println(); } void sort(int[] arr) { int temp = 0; for(int i = 1;i < arr.length;i++){ for(int j = 0;j < arr.length - i;j++){ if(arr[j] > arr[j + 1]){ temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } } } }2、直接排序 3、反转排序