数组是具备相同数据类型的一组数据的集合,根据维数不一样能够分为一维数组、二维数组和多维数组。Java 语言中提供的数组是用来存储固定大小的同类型元素。java
在使用数组以前,必须首先定义数组变量所属的类型,即声明数组。算法
数组元素类型 数组名[]; 或 数据元素类型[] 数组名;
须要注意的声明时是[]中不能添加任何数据。两种声明方式都正确,不一样数据要声明不一样类型的数组;具体以下:数组
int arr[]; // 声明int型数组,数组中每一个元素都是int型数值 或 String[] str; // 声明String数组,数组中每一个元素都是String数组
数组名 = new 数组元素类型[数组元素个数];
实例以下:ide
arr = new int[5]; //为数组分配一个大小为5的内存空间
数组元素类型 数组名 = new 数组元素类型[数组元素个数];
例如:建立了一个一维数组arr,并指定了数组长度为9。对象
int arr = new int[9];
数组也能够与基本数据类型同样进行初始化操做,能够分别初始化数组中的每一个元素。排序
数组初始化的方式有两种,具体以下:索引
int arr1[] = new int[]{1,2,3,4,5}; // 第一种 或 int arr2[] = {10,11,12,13,14}; // 第二种
数组初始化的方式是:把数据包括在大括号以内,中间用逗号分开数组中的元素的值,系统自动为数组分配必定的空间。内存
练习1:求一组一维数组的和it
public class Demo01 { public static void main(String[] args) { int arr[] = {1, 2, 3, 4, 5}; // 建立并初始化数组 int sum = 0; // 存储累加和 for (int i = 0; i < arr.length; i++) { //arr.length表示数组的长度 sum += arr[i]; } System.out.println("sum的和为" + sum); } }
运行结果:for循环
sum的和为15
练习2:遍历数组
public class Demo02 { public static void main(String[] args) { int arr[] = {1, 2, 3, 4, 5}; // 建立并初始化数组 int sum = 0; // 存储累加和 //普通的for循环 for (int i = 0; i < arr.length; i++) { //arr.length表示数组的长度 System.out.print(arr[i] + " "); } System.out.println(); //加强型的for循环 for (int array : arr){ System.out.print(array + " "); } } }
运行结果:
1 2 3 4 5 1 2 3 4 5
若是一维数组中的各个元素还是一维数组,那么它就是一个二维数组。二维数组经常使用于表示表,表中的信息以行和列的形式组织,第一个下标表明元素所在的行,第二个下标代码元素所在的列。或用线性代数的知识来讲,二维数组就是一个矩阵,第一个下标表明矩阵的行,第二个下标表明矩阵的列。
二维数组的声明也有两种方式,语法格式以下:
数组元素类型 数组名[][]; 数组元素类型[][] 数组名;
与一维数组同样,若是声明时没有分配内存空间,一样也要使用关键字new来分配内存。
二维数组能够看做由多个一维数组组成,在给二维数组分配内存时,能够为这些一维数组同时分配相同的内存。第一个中括号中的数组是一维数组的个数,第二个中括号中是一维数组的长度。
int arr = new int[2][4]; //声明一个二维数组arr并为其分配内存空间,分配后arr拥有两个长度为4的一维数组
二维数组初始化
二维数组的初始化与一维数组相似,一样可使用大括号完成二维数组的初始化。以下:
int arr[][] = {{3,0},{5,7},{6,9}};
练习:遍历二维数组
public class Demo03 { public static void main(String[] args) { int arr[][] = {{1,2},{3,4,5},{6,7,8,9}}; 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.println(); // 换行 } } }
运行结果:
1 2 3 4 5 6 7 8 9
对于三维数组,想必各位已经能推算出来了,一维用一个括号,二维用两个括号,那么三维就用三个括号。
int arr[][][] = new int[][][]{ {{1,2,3},{4,5,6}}, {{7,8,9},{10,11,12}}, {{13,14,15},{16,17,18}} };
java.util.Arrays 类能方便地操做数组,它提供的全部方法都是静态的。
具备如下功能:
具体说明请查看下表:
序号 | 方法和说明 |
---|---|
1 | public static int binarySearch(Object[] a, Object key) 用二分查找算法在给定数组中搜索给定值的对象(Byte,Int,double等)。数组在调用前必须排序好的。若是查找值包含在数组中,则返回搜索键的索引;不然返回 (-(插入点) - 1)。 |
2 | public static boolean equals(long[] a, long[] a2) 若是两个指定的 long 型数组彼此相等,则返回 true。若是两个数组包含相同数量的元素,而且两个数组中的全部相应元素对都是相等的,则认为这两个数组是相等的。换句话说,若是两个数组以相同顺序包含相同的元素,则两个数组是相等的。一样的方法适用于全部的其余基本数据类型(Byte,short,Int等)。 |
3 | public static void fill(int[] a, int val) 将指定的 int 值分配给指定 int 型数组指定范围中的每一个元素。一样的方法适用于全部的其余基本数据类型(Byte,short,Int等)。 |
4 | public static void sort(Object[] a) 对指定对象数组根据其元素的天然顺序进行升序排列。一样的方法适用于全部的其余基本数据类型(Byte,short,Int等)。 |
代码以下:
import java.util.Arrays; /** * 冒泡排序 */ public class Demo04 { public static void main(String[] args) { int[] array = {1,4,6,2,8,5,0}; //临时变量 int tmp; //外层循环:判断须要循环多少次 for (int i = 0; i < array.length-1; i++) { //内层循环:比较两个数 for (int j = 0; j < array.length-1-i; j++) { if (array[j+1] > array[j]){ tmp = array[j]; array[j] = array[j+1]; array[j+1] = tmp; } } } System.out.println(Arrays.toString(array)); } }
运行结果:
[8, 6, 5, 4, 2, 1, 0]