数组的定义
数组是相同类型数据的集合。
数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成。
其中,每一个数据称作一个数组元素,每个数组元素可以通过一个下标来访问它们。
数组的声明和创建
首先必须声明数组变量 ,才能在程序中使用数组。下面是声明数组的语法:
int[] array; // 首选
int array[];
Java通过new操作符来创建数组,语法如下:
dataType[] array=new dataType[arraySize];
数组的元素是通过索引访问的,数组索引从0开始。
获取数组长度:arrays.length
静态初始化
int[] array = {1,2,3,4};
动态初始化
int[] array = new int[2];
array[0] = 1;
array[1] = 2;
数组默认的初始化
数组是引用类型,它的元素相当于类的实例变量,因此数组已经分配空间,其中的每个元素也按照实例变量同样的方式被隐式初始化。
数组的四个基本特点
长度确定。数组一旦被创建,其大小就不可变。
其元素必须是相同类型,不允许出现混合类型。
数组中的元素可以是任何数据类型,包括基本类型和引用类型。
数组变量属引用类型,数组也可以看成是对象,数组中每个元素相当于该对象的成员变量。数组本身就是对象,Java中对象是在堆中的,因此数组无论保存原始类型还是其他对象类型,数组对象本身是在堆中的。
数组使用
普通的for循环
For-Each循环
数组作方法入参
数组作返回值
package org.ning;
public class Array {
public static void main(String[] args) {
int[] array = {1,2,3,4,5};
// fori循环
for (int i = 0; i < array.length; i++) {
System.out.println(array[i]);
}
System.out.println("=====================");
// 增强for循环
for(int arr:array){
System.out.println(arr);
}
System.out.println("=====================");
printArray(array);
System.out.println("=====================");
int[] reverse = reverse(array);
for (int j : reverse) {
System.out.println(j);
}
}
/**
* 方法区传参
* @param array
*/
public static void printArray(int[] array){
for (int i = 0; i < array.length; i++) {
System.out.println(array[i]);
}
}
/**
* 数组反转 ,返回值是数组类型
* @param array
* @return
*/
public static int[] reverse (int[] array){
int[] reverse = new int[array.length];
for (int i = 0,j=array.length-1; i < array.length; i++,j--) {
reverse[j] = array[i];
}
return reverse;
}
}
多维数组
多维数组可以看成是数组的数组,比如二维数组就是一个特殊的数组,其中每一个元素都是一个一维数组
二维数组的定义
int arrays[][] = new int[2][5];
// 可以看成两行五列的数组
二维数组的使用
int arrays[][] = {{1,2},{2,3},{3,4},{4,5}}
System.out.println(arrays[1][0]);
// 循环打印所有
for (int i = 0; i < arrays.length; i++) {
for (int j = 0; j < arrays[i].length; j++) {
System.out.println(arrays[i][j]);
}
}
Arrays 类
数组工具包java.util.Arrays
jdk文档
public class Arrays
extends Object
– 该类包含用于操作数组的各种方法(如排序和搜索)。 该类还包含一个静态工厂,可以将数组视为列表。
– 如果指定的数组引用为空,则该类中的方法都抛出一个NullPointerException ,除非另有说明。
– 该类中包含的方法的文档包括实现的简要描述 。 这些描述应被视为实施说明 ,而不是说明书的一部分 。 只要规范本身得到遵守,实现者就可以随意替代其他算法。 (例如,sort(Object[])使用的sort(Object[])不一定是MergeSort,但它必须是稳定的 。)
int[] arr = {1,4,5,23,245,3467,34,21,1,4,56};
Arrays.sort(arr); // 排序
System.out.println(Arrays.toString(arr));