声明数组变量
下面是声明数组变量的语法:
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