数组的概念:Java 语言中提供的数组是用来存储固定大小的同类型元素,即一组类型相同的元素。
一维数组
声明数组
数组的声明有两种方式:
dataType[] arrayRefVar; // 首选的方法
dataType arrayRefVar[]; // 效果相同,但不是首选方法
这两种方式只是在写法上略有不同,并没有实质性的差别。
创建数组
创建数组分为两步:
- 声明数组
- 实例化数组
dataType[] arrayRefVar = new dataType[arraySize];
即声明指定类型的数组并为数组分配指定空间,再给每一个元素赋值。
在赋值之前,数组当中其实是有元素的,根据类型的不同其中的元素也不同,引用数据类型的值为null,基本数据类型根据类型的不同又有不同,byte、int、short、long类型为0,float、double类型为0.0,char类型为空格( ),boolean类型为false。
dataType[] arrayRefVar = {value0, value1, ..., valuek};
声明的时候直接赋值,这样不用指定数组的长度,赋多少值数组的长度就是多少。
数组的元素是通过索引来访问的,并且数组的索引是从0开始的,从0到arraySize.length-1。
数组的遍历
数组的遍历就是得到数组中的每一个元素,我们知道数组的每一个元素都是有一个索引的,我们遍历数组也是根据这个索引得到相应索引位置上的元素,一般遍历数组都是通过循环实现的。
public static void main(String[] args) {
// 定义一个数组
int[] arr = new int[5];
// 给每一个元素赋值
arr[0] = 1;// 动态初始化
arr[1] = 2;
arr[2] = 3;
arr[3] = 4;
arr[4] = 5;
// 遍历数组
for (int i = 0; i < arr.length; i++) {
// 输出每一个元素
System.out.println(arr[i]);
}
}
我们也可以通过增强for循环来实现数组的遍历。
for (int i : arr) {
System.out.println(arr[i]);
}
数组排序
这里介绍的是比较常见的冒泡排序和选择排序
冒泡排序
冒泡排序是比较经典的算法,它的思路是:比较数组中相邻的两个元素,将大的元素交换到右端。
public static void main(String[] args) {
int[] arr={6,3,8,2,9,1};// 定义一个数组并静态初始化
System.out.println("排序前数组为:");
for(int num:arr){
System.out.print(num+" ");
}
for(int i=0;i<arr.length-1;i++){//外层循环控制排序趟数
for(int j=0;j<arr.length-1-i;j++){//内层循环控制每一趟排序多少次
if(arr[j]>arr[j+1]){
int temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
System.out.println();
System.out.println("排序后的数组为:");
for(int num:arr){
System.out.print(num + " ");
}
}
选择排序
选择排序的基本思路:在数组的元素中选出最小的元素,将这个元素放到索引为0的位置,从第二位在进行比较,将最小的放到索引为1的位置,以此类推。
public static void main(String[] args) {
int[] arr = { 1, 3, 2, 45, 65, 33, 12 };
System.out.println("交换之前:");
for (int num : arr) {
System.out.print(num + " ");
}
// 选择排序的优化
for (int i = 0; i < arr.length - 1; i++) {// 做第i趟排序
int k = i;
for (int j = k + 1; j < arr.length; j++) {// 选最小的记录
if (arr[j] < arr[k]) {
k = j; // 记下目前找到的最小值所在的位置
}
}
// 在内层循环结束,也就是找到本轮循环的最小的数以后,再进行交换
if (i != k) { // 交换a[i]和a[k]
int temp = arr[i];
arr[i] = arr[k];
arr[k] = temp;
}
}
System.out.println();
System.out.println("交换后:");
for (int num : arr) {
System.out.print(num + " ");
}
}
多维数组
多维数组(这里以二维数组为例)和一维数组没有太大的区别,就是数组中的每一个元素都是一个一维数组。
type arrayName = new type[arraylenght1][arraylenght2];
// 实例
int a[][] = new int[2][3];
二维数组可以用于矩阵的运算
/**
* 矩阵相加
*
* @author Administrator
*
*/
public class Demo2 {
public static void main(String[] args) {
int[][] a = { { 1, 3, 5 }, { 2, 4, 8 } };
int[][] b = { { 3, 4, 5 }, { 5, 6, 9 } };
int[][] c = add(a, b);
print(c);
}
/**
* 矩阵相加方法
*
* @param a
* @param b
* @return
*/
public static int[][] add(int[][] a, int[][] b) {
// 用来接收结果
int[][] c = new int[a.length][a.length];
// 遍历数组,进行加运算
for (int i = 0; i < c.length; i++) {
for (int j = 0; j < c[i].length; j++) {
// System.out.println(c[i].length);
c[i][j] = a[i][j] + b[i][j];
}
}
return c;
}
/**
* 打印数组方法
*
* @param arr
*/
public static void print(int[][] arr) {
// 遍历数组
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
System.out.print(arr[i][j] + "\t");
}
System.out.println();
}
}
}
数组的工具类
java中提供了对数组操作的工具类Arrays,它在java.utils.Arrays包下,它提供的方法都是静态的。
具有以下功能:
- 给数组赋值:通过 fill 方法。
- 对数组排序:通过 sort 方法,按升序。
- 比较数组:通过 equals 方法比较数组中元素值是否相等。
- 查找数组元素:通过 binarySearch 方法能对排序好的数组进行二分查找法操作。