数组(Arrays)是一种基本的数据结构,可以存储固定大小的相同类型的元素。
在 Java 中,数组可以是任何类型的数据的集合,包括基本数据类型和引用数据类型。
一、数组创建
(1)先声明再初始化
// 声明数组变量
dataType[] array;
// 使用new创建数组
array = new dataType[arraySize];
array = new dataType[] {value1, value2, value3}
(2)同时声明与初始化
dataType[] array = new dataType[arraySize];
dataType[] array = {value1, value2, value3};
dataType[] array = new dataType[] {value1, value2, value3}
注:数组的元素通过索引访问。数组索引从 0 开始,所以索引值从 0 到 array.length-1。
二、数组遍历
(1)for 循环遍历
int[] myList = new int[] {1, 2, 3, 4, 5};
int total = 0;
for (int i = 0; i < int.length; i++) {
total += myList[i];
}
(2)For-Each 循环遍历
// For-Each 循环,能在不使用下标的情况下遍历数组。
int[] myList = new int[] {1, 2, 3, 4, 5};
int total = 0;
for(int element: myList)
{
total += element;
}
三、数组特点
- 数组的大小固定,一旦创建不能更改。添加或删除元素,需要创建一个新数组。
- 数组中元素必须是相同类型,不能出现混合类型。
- 数组中元素的类型可以是任意类型(引用类型、基本类型)。
- 数组变量属引用类型,数组也可以看成是对象,数组中每个元素相当于该对象的成员变量。
四、多维数组
多维数组可以看成是数组的数组
1.普通二维数组
// Length1 和 Length2 必须为正整数,Length1 为行数,Length2 为列数。
dataType[][] array = new dataType[Length1][Length2];
2. 不规则数组(锯齿状数组)
不规则数组是指每一行的长度可以不同。
String[][] s = new String[2][];
//最高维限制其能保存数据的最长的长度
s[0] = new String[2]; // 为最高维分配引用空间
s[1] = new String[3]; // 为最高维分配引用空间
五、Arrays 类
java.util.Arrays 类能方便地操作数组,它提供的所有方法都是静态的。常用方法如下:
(1)Arrays.fill()
// 将指定的 int 值分配给指定 int 型数组指定范围中的每个元素。
// 同样的方法适用于所有的其他基本数据类型
// public static void fill(int[] a,int fromIndex, int toIndex, int val)
// fromIndex - 要使用指定值填充的第一个元素的索引(包括)
// toIndex - 要使用指定值填充的最后一个元素的索引(不包括)
int[] array = new int[10];
Arrays.fill(array, 3, 6, 50);
(2)Arrays.toString()
// 可以将数组转换成String类型输出的
int[] intArray = { 1, 4, 6, 7, 8, 9, 10 };
System.out.println(Arrays.toString(intArray));
(3)Arrays.sort()
基于快速排序的算法思想:最坏情况下是O(n*n),最好和平均情况下都是O(nlogn)。
1. 普通排序,默认升序
//对指定对象数组根据其元素的自然顺序进行升序排列。
int[] a = {9, 8, 7, 2, 3, 4, 1, 0, 6, 5};
// public static void sort(Object[] a, int fromIndex, int toIndex);
// 对数组部分排序,也就是对数组a的下标从fromIndex到toIndex-1的元素排序
Arrays.sort(a, 0, 3);
// public static void sort(Object[] a);
// 也可以省略下标参数
Arrays.sort(a);
2. 用Comparator接口实现自定义排序规则
用法示例:
// public static void sort(T[] a, Comparator<? Super T> c);
int[][] intervals = new int[][] {{1,2},{4,8},{2,3},{2,5}};
Arrays.sort(intervals, new Comparator<int[]>() {
public int compare(int[] a, int[] b) {
//返回值>0交换
if(a[0] !=b[0]) {
return a[0]-b[0];
}else {
return a[1]-b[1];
}
}
});
(4)Arrays.binarySearch()
在排序数组中进行二分搜索。如果找到,返回元素的索引;如果未找到,返回负数。
int[] numbers = new int[5]{1,2,3,4,5};
int index = Arrays.binarySearch(numbers, 3);
System.out.println(index); // 输出 2