文章目录
- 一、数组的概念
- 二、数组的特点
- 三、数组的声明
- 四、数组的分配空间(创建数组)
- 五、数组的属性和方法
- 六、初始化一维数组
- 七、初始化二维数组
- 八、初始化不规则数组
- 九、数组的工具类Arrays
- 十、数组的排序
一、数组的概念
数组(array)
是一种数据结构,用来存储同一类型值的集合。
- 它是有序数据的集合。
- 通过一个整型下标可以访问数组中的每一个值。
- 根据数组的维度,可以将其分为一维数组、二维数组和多维数组等。
二、数组的特点
在计算机语言中数组是非常重要的集合类型,大部分计算机语言中数组具有如下三个基本特性:
- 一致性:数组只能保存相同数据类型元素,元素的数据类型可以是任何相同的数据类型。
- 有序性:数组中的元素是有序的,通过下标访问。
- 不可变性:数组一旦初始化,则长度(数组中元素的个数)不可变
- 数值数组元素的默认值为 0,而引用元素的默认值为 null。
- 数组的索引从 0 开始,如果数组有 n 个元素,那么数组的索引是从 0 到(n-1)。
- 数组元素可以是任何类型,包括数组类型。Java 的数组既可以存储基本类型的数据,也可以存储引用类型的数据,只要所有的数组元素具有相同的类型即可。
- 数组可以是一维数组、二维数组或多维数组。
三、数组的声明
type[] arrayName; // 数据类型[] 数组名;在声明数组的时候,不需要加数组的长度。
或者
type arrayName[]; // 数据类型 数组名[];在声明数组的时候,不需要加数组的长度。
代码如下:
String[] name; // 存储商品名称,类型为字符串型
四、数组的分配空间(创建数组)
声明了数组,只是得到了一个存放数组的变量,并没有为数组元素分配内存空间,不能使用。 在 Java 中可以使用 new 关键字来给数组分配空间 。
代码如下:
name = new String[20];//分配一个长度为20的空间给组数,也就是数组长度为20。
五、数组的属性和方法
名称 | 返回值 | |
方法 | clone() | Object |
equals(Object obj) | boolean | |
getClass() | Class<?> | |
hashCode() | int | |
notify() | void | |
notify All() | void | |
toString() | String | |
wait() | void | |
wait(long timeout) | void | |
wait(long timeout,int nanos) | void | |
属性 | length | int |
六、初始化一维数组
初始化一维数组:
int[] arr = new int[5];
arr[0] = 1;
//或者
int[] arr = new int[]{1, 2, 3, 5, 8};
//或者
int[] arr = { 1, 2, 3, 4 };
获取数组下标的元素: index 表示下标,下标为 0 表示获取第一个元素,下标为 array.length-1 表示获取最后一个元素。当指定的下标值超出数组的总长度时,会拋出 ArraylndexOutOfBoundsException 异常。
int a = arr[0];//获取第一个元素
int b = arr[4];//获取最后一个元素
//获取全部元素,也可以用for循环
for(int val:arr) {
System.out.print("元素的值依次是:"+val+"\t");
}
七、初始化二维数组
Java 并不直接支持二维数组,但是允许定义数组元素是一维数组的一维数 。
三种初始化数组的语法:
type[][] arrayName = new type[][]{值 1,值 2,值 3,…,值 n}; // 在定义时初始化
type[][] arrayName = new type[size1][size2]; // 给定空间,在赋值
type[][] arrayName = new type[size][]; // 数组第二维长度为空,可变化
例如:
int[][] temp = new int[][]{{1,2},{3,4}};
int[][] temp = new int[2][2];
int[][] temp = new int[2][];
获取单个元素:
arrayName[i-1][j-1];
获取全部元素:需要遍历:
public class DemoTest {
public static void main(String[] args) {
// 创建一个二维矩阵
int[][] matrix = new int[5][5];
// 随机分配值
for (int i = 0; i < matrix.length; i++) {
for (int j = 0; j < matrix[i].length; j++) {
matrix[i][j] = (int) (Math.random() * 10);
}
}
System.out.println("下面是程序生成的矩阵\n");
// 遍历二维矩阵并输出
for (int k = 0; k < matrix.length; k++) {
for (int g = 0; g < matrix[k].length; g++) {
System.out.print(matrix[k][g] + "");
}
System.out.println();
}
}
}
八、初始化不规则数组
int intArray[][] = new int[4][]; //先初始化高维数组为4
// 逐一初始化低维数组
intArray[0] = new int[2];
intArray[1] = new int[1];
intArray[2] = new int[3];
intArray[3] = new int[3];
内存空间:
九、数组的工具类Arrays
Arrays 类是一个工具类,其中包含了数组操作的很多方法。这个 Arrays 类里均为 static 修饰的方法(static 修饰的方法可以直接通过类名调用),可以直接通过 Arrays.xxx(xxx) 的形式调用方法。
方法名 | 方法说明 |
Arrays.toString(ints) | 返回数组的字符串格式 |
Arrays.sort(ints); | 数组按照升序排序 |
Arrays.sort(ints,0,4); | 排序其他用法,对指定下标范围进行排序 |
Arrays.fill(ints,1); | 给数组元素填充相同的值1 |
Arrays.deepToString(ints) | 返回多维数组的字符串格式 |
Arrays.equals(ints[0],ints[1])) | 比较两个数组的元素是否相等 |
十、数组的排序
有几种方法:
1. Arrays.sort()
2. 冒泡排序
3. 快速排序
4. 选择排序
5. 直接插入