Java 数组的声明、创建和初始化、Arrays 类

声明数组变量

下面是声明数组变量的语法:

dataType[] arrayRefVar;   // 首选的方法
 
或
 
dataType arrayRefVar[];  // 效果相同,但不是首选方法

下面是这两种语法的代码示例:

double[] myList;         // 首选的方法
 
或
 
double myList[];         //  效果相同,但不是首选方法

创建数组

Java语言使用new操作符来创建数组,例如
动态创建:

int [] MyList;			//声明一个数组Mylist
MyList = new int[length];	//用new创建了一个数组,并将引用赋值给变量MyList

静态创建:

dataType[] arrayRefVar = {value0, value1, ..., valuek};
//int[] pi = {7,3,4,6,1};

数组的元素是通过索引访问的。数组索引从 0 开始,所以索引值从 0 到 length-1

处理数组

通常使用基本循环或者 For-Each 循环处理数组元素。
下面介绍一个例子

package Liu;
public class TestString {
	
	public static void main(String[] args) {
		
		double[] MyList = {1.7, 2.2, 3.1, 2.5, 7.7, 5.4, 3.5, 0.1, 0.66, 3.99};
		//遍历输出
		for(int i=0;i<MyList.length;i++) {
			System.out.print(MyList[i] + " ");
		}
		//求和输出
		double sum = 0;
		for(int i=0;i<MyList.length;i++) {
			sum = sum + MyList[i];
		}
		System.out.println("\n" + "sum is " + sum);
		//求最大值,最小值
		double max,min;
		max = min = MyList[0];
		for(int i=0;i<MyList.length;i++) {
			if(MyList[i]<min) {
				min = MyList[i];
			}
			if(MyList[i]>max) {
				max = MyList[i];
			}
		}
		System.out.println("max is " + max);
		System.out.println("min is " + min);
	}

}
1.7 2.2 3.1 2.5 7.7 5.4 3.5 0.1 0.66 3.99 
sum is 30.85
max is 7.7
min is 0.1

For-Each 循环

JDK 1.5 引进了一种新的循环类型,被称为 For-Each 循环或者加强型循环,它能在不使用下标的情况下遍历数组。

语法格式如下:

for(type element: array)
{
    System.out.println(element);
}

例如:

package Liu;
public class TestString {
	
	public static void main(String[] args) {
		
		int[] Yan = {2,4,5,8,9,0};
		for(int element:Yan) {
			System.out.print(element + " ");
		}
	}

}
2 4 5 8 9 0

数组作为函数的参数、返回值

数组可以作为参数传递给方法。

package Liu;
public class TestString {
	//打印int数组
	public void PrintList(int [] Array) {
		for(int i=0;i<Array.length;i++) {
			System.out.print(Array[i] + " ");
		}
		System.out.println();
	}
	//打印double数组
	public void PrintList(double [] Array) {
		for(int i=0;i<Array.length;i++) {
			System.out.print(Array[i] + " ");
		}
		System.out.println();
	}
	//打印char数组
	public void PrintList(char [] Array) {
		for(int i=0;i<Array.length;i++) {
			System.out.print(Array[i] + " ");
		}
		System.out.println();
	}
	public static void main(String[] args) {
		
		int[] Yan = {2,4,5,8,9,0};
		char[] Bai = {'a','b','f','e','y'};
		TestString t = new TestString();
		t.PrintList(Bai);
	}

}

a b f e y 

多维数组

多维数组可以看成是数组的数组,这里以二维数组为例,比如二维数组就是一个特殊的一维数组,其每一个元素都是一个一维数组。

多维数组的动态初始化(以二维数组为例)


type arrayName = new type[arraylenght1][arraylenght2];
例如:int [][] a = new int [2][4]; 

那么对二维数组的定义有两种声明形式:

数组的动态初始化:数据类型 对象数组[][] = new 数据类型[行个数][列个数];
数组的静态初始化:数据类型 对象数组[][] = new 数据类型[行个数][列个数]{{值, 值,…}, {值, 值,…},…};

定义一个二维数组

public static void main(String[] args) {
		
		int[][] a = new int[][] {{1,2,3},{4,5,6}};
		System.out.print(a[0][0]);
	}
}

Arrays 类

java.util.Arrays 类能方便地操作数组,它提供的所有方法都是静态的。

具有以下功能:

给数组赋值:通过 fill 方法。
对数组排序:通过 sort 方法,按升序。
比较数组:通过 equals 方法比较数组中元素值是否相等。
查找数组元素:通过 binarySearch 方法能对排序好的数组进行二分查找法操作。
方法名 解释
public static int binarySearch(Object[] a, Object key) 用二分查找算法在给定数组中搜索给定值的对象(Byte,Int,double等)。数组在调用前必须排序好的。如果查找值包含在数组中,则返回搜索键的索引;否则返回 (-(插入点) - 1)。
public static boolean equals(long[] a, long[] a2) 如果两个指定的 long 型数组彼此相等,则返回 true。如果两个数组包含相同数量的元素,并且两个数组中的所有相应元素对都是相等的,则认为这两个数组是相等的。换句话说,如果两个数组以相同顺序包含相同的元素,则两个数组是相等的。同样的方法适用于所有的其他基本数据类型(Byte,short,Int等)。
public static void fill(int[] a, int val) 将指定的 int 值分配给指定 int 型数组指定范围中的每个元素。同样的方法适用于所有的其他基本数据类型(Byte,short,Int等)。
public static void sort(Object[] a) 对指定对象数组根据其元素的自然顺序进行升序排列。同样的方法适用于所有的其他基本数据类型(Byte,short,Int等)。
package Liu;

import java.util.Arrays;
import java.util.Scanner;

public class ArrayMethodDemo1 {
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner scanner = new Scanner(System.in);
		int [] arr = {7,5,3,12,9,17,14,15,16,13};
		System.out.print("排序前:");
		for(int i=0;i<arr.length;i++) {
			System.out.print(arr[i] + " ");
		}
		System.out.println();
		Arrays.sort(arr);
		System.out.print("排序后:");
		for(int i=0;i<arr.length;i++) {
			System.out.print(arr[i]+ " ");
		}
		System.out.println();
		System.out.print("请输入搜索值:");
		int key = scanner.nextInt();
		int find = -1;
		if(Arrays.binarySearch(arr, key)>-1) {
			find = Arrays.binarySearch(arr, key);
			System.out.println("找到值于索引" + find + "位置");
		}else {
			System.out.println("找不到指定值");
		}
	}

}
排序前:7 5 3 12 9 17 14 15 16 13 
排序后:3 5 7 9 12 13 14 15 16 17 
请输入搜索值:12
找到值于索引4位置
package Liu;

import java.util.Arrays;
import java.util.Scanner;

public class ArrayMethodDemo1 {
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner scanner = new Scanner(System.in);
		int [] arr1 = new int[10];
		int [] arr2 = new int [10];
		int [] arr3 = new int [10];
		Arrays.fill(arr1, 5);	//填充
		Arrays.fill(arr2, 5);	
		Arrays.fill(arr3, 10);
		System.out.print("arr1:");		//遍历输出arr1
		for(int i=0;i<arr1.length;i++) {
			System.out.print(arr1[i] + " ");
		}
		System.out.println();
		System.out.println("arr1 = arr2 ? " + Arrays.equals(arr1, arr2));
		System.out.println("arr1 = arr3 ? " + Arrays.equals(arr1, arr3));
	}

}
arr1:5 5 5 5 5 5 5 5 5 5 
arr1 = arr2 ? true
arr1 = arr3 ? false

猜你喜欢

转载自blog.csdn.net/practical_sharp/article/details/87878113