1. 数组的概述
- 数组(Array)是多个相同类型的数据按一定顺序排列的集合,并使用一个名字命名,通过编号的方式对这些数据进行统一管理。
- 数组本身是引用数据类型的变量,数组中的元素可以是任何类型的变量。
- 创建数组对象会在内存中开辟一整块连续的空间,数组名中引用的是这块连续空间的首地址。
- 数组的长度一旦确定,就不能修改。
- 可以直接通过下标(索引)的方式调用指定位置的元素,速度很快。
2. 一维数组
2.1 一维数组的使用
2.1.1 一维数组的基本操作
- 一维数组的声明和初始化:数组有两种声明方式和两种初始化方式
- 如何调用数组的指定位置的元素
- 如何获取数组的长度
- 如何遍历数组
public class ArrayTest {
public static void main(String[] args) {
// 数组声明的两种方式
String[] names;
int scores[];
// 数组初始化的两种方式
names = new String[] {
"aa", "bb", "cc" }; // 静态初始化
scores = new int[4]; // 动态初始化
scores[0] = 88;
scores[1] = 99;
System.out.println(names[2]);
System.out.println(scores[2]);
// 获取数组的长度:数组的属性length
System.out.println(names.length);
// 遍历数组
for (int i = 0; i < scores.length; i++) {
System.out.println(scores[i]);
}
//类型推断
int[] arr = {
1,2,3,4,5};
}
}
2.1.2 数组元素的默认初始化值
- 数组元素是byte、short、int、long,默认值为:0
- 数组元素是float、double,默认值为:0.0
- 数组元素是char,默认值为:0(显示为空格)
- 数组元素是boolean,默认值为:false
- 数组元素是String,默认值为:null
2.2 一维数组的内存解析
2.2.1 内存结构的简单说明
主要内存结构有:栈、堆、方法区
- 栈:存放局部变量、对象的引用名、数组的引用名
- 堆:存放new出来的结构(对象的实体、数组的实体),含成员变量
- 方法区:存放类名、类的加载信息、包名、方法的定义。其内有常量池和静态域。
2.2.2 一维数组的内存分配
数组的复制需要new一个同等长度的数组,直接用数组名进行赋值会使两个数组的指针指向同一位置。
Java中char型数组打印变量名会直接遍历数组,其他类型的数组打印变量名都是输出地址值。
3. 二维数组
二维数组实际上是将一维数组array1作为另一个一维数组array2的元素。从数组的底层运行机制来看,并没有多维数组。
3.1 二维数组的声明和初始化
二维数组的动态初始化有两种形式
public class ArrayTest2 {
public static void main(String[] args) {
// 静态初始化
int[][] arr1 = new int[][] {
{
1, 2, 3 }, {
4, 5 }, {
6, 7, 8 } };
int[] arr4[] = {
{
1, 2, 3 }, {
4, 5 }, {
6, 7, 8 } };
// 两种方式的动态初始化
String[][] arr2 = new String[3][2];
String[][] arr3 = new String[3][];
arr3[0] = new String[2];
arr3[1] = new String[3];
}
}
3.2 二维数组的内存解析
4. Arrays工具类
java.util.Arrays类为操作数组的工具类,包含了用来操作数组的各种方法。
- boolean equals(int[] a,int[] b):判断两个数组是否相等
- String toString(int[] a):输出数组信息
- void fill(int[] a,int val):将指定值填充到数组中
- void sort(int[] a):对数组进行排序(从小到大)
- int binarySearch(int[] a,int key):对排序后的数组进行二分法检索指定的值,没找到返回负数